클러스터 연결을 사용하여 Azure Arc 지원 Kubernetes 클러스터에 안전하게 연결합니다.

클러스터 연결을 사용하면 방화벽에서 인바운드 포트를 사용하도록 설정하지 않고도 어디서나 Azure Arc 지원 Kubernetes 클러스터에 안전하게 연결할 수 있습니다.

Azure Arc 지원 Kubernetes 클러스터의 apiserver에 액세스하면 다음과 같은 시나리오를 사용할 수 있습니다.

  • 대화형 디버깅 및 문제 해결.
  • 사용자 지정 위치 및 그 위에 만들어진 기타 리소스에 대한 Azure 서비스에 대한 클러스터 액세스입니다.

시작하기 전에 클러스터 연결 기능의 개념적 개요를 검토합니다.

필수 조건

  • Azure CLI를 최신 버전으로 설치하거나 업데이트합니다.

  • 최신 버전의 connectedk8s Azure CLI 확장을 설치합니다.

    az extension add --name connectedk8s
    

    connectedk8s 확장을 이미 설치한 경우 최신 버전의 확장으로 업데이트합니다.

    az extension update --name connectedk8s
    
  • 자리 표시자를 바꾸고 아래 명령을 실행하여 이 문서에 사용된 환경 변수를 설정합니다.

    CLUSTER_NAME=<cluster-name>
    RESOURCE_GROUP=<resource-group-name>
    ARM_ID_CLUSTER=$(az connectedk8s show -n $CLUSTER_NAME -g $RESOURCE_GROUP --query id -o tsv)
    
  • Arc 지원 Kubernetes에 대한 네트워크 요구 사항을 충족하는 것 외에도 아웃바운드 액세스를 위해 다음 엔드포인트를 사용하도록 설정합니다.

    엔드포인트 포트
    *.servicebus.windows.net 443
    guestnotificationservice.azure.com: *.guestnotificationservice.azure.com 443

    참고 항목

    *.servicebus.windows.net 와일드카드를 특정 엔드포인트로 변환하려면 \GET https://guestnotificationservice.azure.com/urls/allowlist?api-version=2020-01-01&location=<location> 명령을 사용합니다. 이 명령 내에서 <location> 자리 표시자에 대한 지역을 지정해야 합니다.

지역 엔드포인트의 지역 세그먼트를 가져오려면 Azure 지역 이름에서 모든 공백을 제거합니다. 예를 들어, 미국 동부 2 지역의 경우 지역 이름은 eastus2입니다.

예: *.<region>.arcdataservices.com은 미국 동부 2 지역에서 *.eastus2.arcdataservices.com여야 합니다.

모든 지역 목록을 보려면 다음 명령을 실행합니다.

az account list-locations -o table
Get-AzLocation | Format-Table

인증 설정

기존 Arc 지원 클러스터에서 Microsoft Entra 인증 또는 서비스 계정 토큰을 사용하여 ClusterRoleBinding을 만듭니다.

Microsoft Entra 인증 옵션

  1. Microsoft Entra 엔터티와 연결된 objectId를 가져옵니다.

    • Microsoft Entra 사용자 계정의 경우:

      AAD_ENTITY_OBJECT_ID=$(az ad signed-in-user show --query id -o tsv)
      
    • Microsoft Entra 애플리케이션의 경우:

      AAD_ENTITY_OBJECT_ID=$(az ad sp show --id <id> --query id -o tsv)
      
  2. 적절한 권한으로 엔터티에 권한을 부여합니다.

    • 클러스터에서 권한 부여 확인을 위해 Kubernetes 네이티브 ClusterRoleBinding 또는 RoleBinding을 사용하는 경우 직접 액세스를 위해 클러스터의 apiserver를 가리키는 kubeconfig 파일을 사용하여 이 클러스터에 액세스해야 하는 Microsoft Entra 엔터티(서비스 주체 또는 사용자)에 매핑된 항목을 만들 수 있습니다. 예시:

      kubectl create clusterrolebinding demo-user-binding --clusterrole cluster-admin --user=$AAD_ENTITY_OBJECT_ID
      
    • 클러스터에서 권한 부여 확인을 위해 Azure RBAC를 사용하는 경우 Microsoft Entra 엔터티에 매핑되는 적용 가능한 Azure 역할 할당을 만들 수 있습니다. 예시:

      az role assignment create --role "Azure Arc Kubernetes Viewer" --assignee $AAD_ENTITY_OBJECT_ID --scope $ARM_ID_CLUSTER
      az role assignment create --role "Azure Arc Enabled Kubernetes Cluster User Role" --assignee $AAD_ENTITY_OBJECT_ID --scope $ARM_ID_CLUSTER
      

서비스 계정 토큰 인증 옵션

  1. Kubernetes 클러스터의 apiserver를 가리키는 kubeconfig 파일을 통해 이 명령을 실행하여 서비스 계정을 만듭니다. 이 예제에서는 기본 네임스페이스에 서비스 계정을 만들지만 default를 다른 네임스페이스로 대체할 수 있습니다.

    kubectl create serviceaccount demo-user -n default
    
  2. ClusterRoleBinding을 만들어 이 서비스 계정에 클러스터에 대한 적절한 권한을 부여합니다. 첫 번째 명령에서 다른 네임스페이스를 사용한 경우 여기에서 default를 대체합니다.

    kubectl create clusterrolebinding demo-user-binding --clusterrole cluster-admin --serviceaccount default:demo-user
    
  3. 서비스 계정 토큰을 만듭니다.

    kubectl apply -f - <<EOF
    apiVersion: v1
    kind: Secret
    metadata:
      name: demo-user-secret
      annotations:
        kubernetes.io/service-account.name: demo-user
    type: kubernetes.io/service-account-token
    EOF
    
    TOKEN=$(kubectl get secret demo-user-secret -o jsonpath='{$.data.token}' | base64 -d | sed 's/$/\n/g')
    
  4. 콘솔에 출력할 토큰 가져오기

    echo $TOKEN
    

클라이언트 디바이스에서 클러스터에 액세스

이제 다른 클라이언트에서 클러스터에 액세스할 수 있습니다. 다른 클라이언트 디바이스에서 다음 단계를 실행합니다.

  1. Microsoft Entra 인증 또는 서비스 계정 토큰 인증을 사용하여 로그인합니다.

  2. 사용되는 인증 옵션에 따라 어디서든(클러스터를 둘러싼 방화벽 외부도 포함) 클러스터와 통신하는 데 필요한 클러스터 연결 kubeconfig를 가져옵니다.

    • Microsoft Entra 인증을 사용하는 경우:

      az connectedk8s proxy -n $CLUSTER_NAME -g $RESOURCE_GROUP
      
    • 서비스 계정 토큰 인증을 사용하는 경우:

      az connectedk8s proxy -n $CLUSTER_NAME -g $RESOURCE_GROUP --token $TOKEN
      

      참고 항목

      이 명령은 프록시를 열고 현재 셸을 차단합니다.

  3. 다른 셸 세션에서 kubectl을 사용하여 클러스터에 요청을 보냅니다.

    kubectl get pods -A
    

이제 default 네임스페이스 아래의 모든 Pod 목록이 포함된 클러스터의 응답이 표시되어야 합니다.

알려진 제한 사항

az connectedk8s show를 사용하여 Arc 지원 Kubernetes 에이전트 버전을 확인합니다.

Kubernetes 클러스터에 요청할 때 사용된 Microsoft Entra 엔터티가 200개가 넘는 그룹에 속하는 경우 다음 오류가 표시될 수 있습니다.

You must be logged in to the server (Error:Error while retrieving group info. Error:Overage claim (users with more than 200 group membership) is currently not supported.

이것은 알려진 제한 사항입니다. 이 오류가 발생하지 않도록 하려면 다음을 수행합니다.

  1. 200개가 넘는 그룹의 멤버일 가능성이 낮은 서비스 주체를 만듭니다.
  2. az connectedk8s proxy 명령을 실행하기 전에 서비스 주체로 Azure CLI에 로그인합니다.

다음 단계