다음을 통해 공유


Azure Operator Nexus Kubernetes 클러스터에 연결

Azure Operator Nexus Kubernetes 클러스터의 전체 수명 주기 기간에 결과적으로 클러스터 노드에 직접 액세스해야 합니다. 유지 관리, 로그 수집 또는 문제 해결 작업을 위해 이 액세스를 사용할 수 있습니다. 인증을 통해 노드에 액세스하며, 메서드는 연결 방법에 따라 달라집니다. 이 문서에서 설명하는 두 가지 옵션을 통해 클러스터 노드를 안전하게 인증합니다. 보안상의 이유로 클러스터 노드는 인터넷에 노출되지 않습니다. 대신 클러스터 노드에 직접 연결하려면 kubectl debug 또는 jumpbox의 호스트 개인 IP 주소 중 하나를 사용해야 합니다.

필수 조건

  • Azure 구독의 리소스 그룹에 배포된 Azure Operator Nexus Kubernetes 클러스터
  • 클러스터 노드에 대한 SSH 프라이빗 키
  • 노드 IP 주소를 사용하여 SSH하려면 클러스터 노드와 동일한 CNI(컨테이너 네트워크 인터페이스) 네트워크에 jumpbox VM을 배포해야 합니다.

서버용 Azure Arc를 통해 클러스터 노드에 액세스

az ssh arc 명령을 사용하면 사용자가 Azure Arc에 연결된 클러스터 VM에 원격으로 액세스할 수 있습니다. 이 메서드는 명령줄에서 직접 클러스터 노드로 SSH하는 안전한 방법이므로 원격 관리를 위한 빠르고 효율적인 방법입니다.

참고 항목

Operator Nexus Kubernetes 클러스터 노드는 기본적으로 Arc 연결 서버입니다.

  1. 필요한 변수를 설정합니다. 자리 표시자를 Azure 환경 및 Nexus Kubernetes 클러스터와 관련된 실제 값으로 바꿉니다.

    RESOURCE_GROUP="myResourceGroup" # Resource group where the Nexus Kubernetes cluster is deployed
    CLUSTER_NAME="myNexusK8sCluster" # Name of the Nexus Kubernetes cluster
    SUBSCRIPTION_ID="<Subscription ID>" # Azure subscription ID
    ADMIN_USERNAME="azureuser" # Username for the cluster administrator (--admin-username parameter value used during cluster creation)
    SSH_PRIVATE_KEY_FILE="<vm_ssh_id_rsa>" # Path to the SSH private key file
    MANAGED_RESOURCE_GROUP=$(az networkcloud kubernetescluster show -n $CLUSTER_NAME -g $RESOURCE_GROUP --subscription $SUBSCRIPTION_ID --output tsv --query managedResourceGroupConfiguration.name)
    
  2. 사용 가능한 클러스터 노드 이름을 가져옵니다.

    az networkcloud kubernetescluster show --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --subscription $SUBSCRIPTION_ID -o json | jq '.nodes[].name'
    
  3. 샘플 출력:

    "mynexusk8scluster-0b32128d-agentpool1-md-7h9t4"
    "mynexusk8scluster-0b32128d-agentpool1-md-c6xbs"
    "mynexusk8scluster-0b32128d-control-plane-qq5jm"
    
  4. 클러스터 노드 이름을 VM_NAME 변수로 설정합니다.

    VM_NAME="mynexusk8scluster-0b32128d-agentpool1-md-7h9t4"
    
  5. 다음 명령을 실행하여 클러스터 노드에 SSH로 연결합니다.

    az ssh arc --subscription $SUBSCRIPTION_ID \
        --resource-group $MANAGED_RESOURCE_GROUP \
        --name $VM_NAME \
        --local-user $ADMIN_USERNAME \
        --private-key-file $SSH_PRIVATE_KEY_FILE
    

Kubernetes API를 사용하여 노드에 액세스

이 메서드는 kubectl debug 명령을 사용해야 합니다. 이 메서드는 컨테이너로 제한되며 전체 노드 액세스와 제어를 제공하는 SSH('az ssh arc' 또는 직접 IP 사용)와 달리 보다 광범위한 시스템 문제를 놓칠 수 있습니다.

Azure Arc for Kubernetes를 통해 Kubernetes API에 액세스

참고 항목

Nexus Kubernetes 클러스터를 만들면 Nexus는 클러스터 리소스 저장 전용 관리되는 리소스 그룹을 자동으로 만들며, 이 그룹 내에서 Arc 연결 클러스터 리소스가 설정됩니다.

클러스터에 액세스하려면 클러스터 연결 kubeconfig를 설정해야 합니다. 관련 Microsoft Entra 엔터티를 사용하여 Azure CLI에 로그인하면 클러스터를 둘러싸고 있는 방화벽 외부에서도 어디에서나 클러스터와 통신하는 데 필요한 kubeconfig를 가져올 수 있습니다.

  1. CLUSTER_NAME, RESOURCE_GROUPSUBSCRIPTION_ID 변수를 설정합니다.

    CLUSTER_NAME="myNexusK8sCluster"
    RESOURCE_GROUP="myResourceGroup"
    SUBSCRIPTION_ID=<set the correct subscription_id>
    
  2. az를 사용하여 관리되는 리소스 그룹을 쿼리하고 MANAGED_RESOURCE_GROUP에 저장합니다.

     az account set -s $SUBSCRIPTION_ID
     MANAGED_RESOURCE_GROUP=$(az networkcloud kubernetescluster show -n $CLUSTER_NAME -g $RESOURCE_GROUP --output tsv --query managedResourceGroupConfiguration.name)
    
  3. 다음 명령은 지정된 Nexus Kubernetes 클러스터에 대한 Kubernetes API 서버에 연결할 수 있게 해주는 connectedk8s 프록시를 시작합니다.

    az connectedk8s proxy -n $CLUSTER_NAME  -g $MANAGED_RESOURCE_GROUP &
    
  4. kubectl을 사용하여 클러스터로 요청을 보냅니다.

    kubectl get pods -A
    

    이제 모든 노드 목록이 포함된 클러스터의 응답이 표시됩니다.

참고 항목

"클라이언트 프록시에 액세스 토큰을 게시하지 못했습니다. MSI에 연결하지 못함" 오류 메시지가 표시되면 az login을 수행하여 Azure에 다시 인증해야 할 수 있습니다.

Kubernetes용 Azure Arc를 통해 클러스터 노드에 액세스

Kubernetes용 Arc를 통해 클러스터에 연결되면 kubectl debug 명령을 사용하여 개별 Kubernetes 노드에 연결하여 노드에서 권한 있는 컨테이너를 실행할 수 있습니다.

  1. Nexus Kubernetes 클러스터의 노드를 나열합니다.

    $> kubectl get nodes
    NAME                                             STATUS   ROLES           AGE    VERSION
    mynexusk8scluster-0b32128d-agentpool1-md-7h9t4   Ready    <none>          125m   v1.24.9
    mynexusk8scluster-0b32128d-agentpool1-md-c6xbs   Ready    <none>          125m   v1.24.9
    mynexusk8scluster-0b32128d-control-plane-qq5jm   Ready    <none>          124m   v1.24.9
    
  2. 노드에서 권한 있는 컨테이너를 시작하고 연결합니다.

    $> kubectl debug node/mynexusk8scluster-0b32128d-agentpool1-md-7h9t4 -it --image=mcr.microsoft.com/cbl-mariner/base/core:2.0
    Creating debugging pod node-debugger-mynexusk8scluster-0b32128d-agentpool1-md-7h9t4-694gg with container debugger on node mynexusk8scluster-0b32128d-agentpool1-md-7h9t4.
    If you don't see a command prompt, try pressing enter.
    root [ / ]#
    

    이 권한 있는 컨테이너는 노드에 대한 액세스를 제공합니다. 명령줄에서 chroot /host를 실행하여 클러스터 노드에서 명령을 실행합니다.

  3. 디버깅 Pod가 완료되면 exit 명령을 입력하여 대화형 셸 세션을 종료합니다. 셸을 종료한 후 Pod를 삭제해야 합니다.

    kubectl delete pod node-debugger-mynexusk8scluster-0b32128d-agentpool1-md-7h9t4-694gg 
    

IP 주소를 사용하여 노드에 대한 대화형 셸 연결 만들기

Azure jumpbox에서 클러스터 노드에 연결

Azure Operator Nexus Kubernetes 클러스터 노드에 안전하게 연결하기 위한 또 다른 옵션은 Azure jumpbox VM에서 클러스터의 CNI 네트워크에 대한 직접 액세스를 설정하는 것입니다. 이 방식을 사용하면 클러스터 노드에 SSH를 통해 연결하고 kubeconfig 파일을 사용하여 클러스터에 대해 kubectl 명령을 실행할 수도 있습니다.

Azure jumpbox VM에서 클러스터의 CNI 네트워크로의 직접 연결을 설정하려면 네트워크 관리자에게 문의하세요.

온-프레미스 jumpbox에서 클러스터 노드에 연결

온-프레미스 jumpbox에서 클러스터의 CNI(컨테이너 네트워크 인터페이스)에 대한 직접 액세스를 설정합니다. 이러한 직접 액세스를 통해 클러스터 노드에 SSH로 연결할 수 있으며 kubeconfig 파일을 사용하여 kubectl 명령을 실행할 수 있습니다.

클러스터의 CNI 네트워크에 대한 직접 연결을 설정하려면 네트워크 관리자에게 문의하세요.

클러스터 노드의 IP 주소

클러스터 노드에 연결하려면 먼저 노드의 IP 주소를 찾아야 합니다. 노드의 IP 주소는 Azure Portal 또는 Azure CLI를 사용하여 찾을 수 있습니다.

Azure CLI 사용

  1. RESOURCE_GROUP, CLUSTER_NAME 및 SUBSCRIPTION_ID 변수를 환경에 맞게 설정합니다.

    RESOURCE_GROUP="myResourceGroup"
    CLUSTER_NAME="myNexusK8sCluster"
    SUBSCRIPTION_ID="<Subscription ID>"
    
  2. 다음 명령을 실행하여 노드의 IP 주소를 가져옵니다.

    az networkcloud kubernetescluster show --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --subscription $SUBSCRIPTION_ID -o json | jq '.nodes[] | select(any(.networkAttachments[]; .networkAttachmentName == "defaultcni")) | {name: .name, ipv4Address: (.networkAttachments[] | select(.networkAttachmentName == "defaultcni").ipv4Address)}'
    
  3. 다음은 명령의 샘플 출력입니다.

    {
      "name": "mynexusk8scluster-0b32128d-agentpool1-md-7h9t4",
      "ipv4Address": "10.5.54.47"
    }
    {
      "name": "mynexusk8scluster-0b32128d-agentpool1-md-c6xbs",
      "ipv4Address": "10.5.54.48"
    }
    {
      "name": "mynexusk8scluster-0b32128d-control-plane-qq5jm",
      "ipv4Address": "10.5.54.46"
    }
    

Azure Portal 사용

SSH용 VM의 IP 주소를 찾으려면 다음 단계를 수행합니다.

  1. Azure Portal로 이동하여 사용자 이름 및 암호를 사용하여 로그인합니다.
  2. 검색 상자에 'Kubernetes 클러스터(Operator Nexus)'를 입력하고 결과 목록에서 'Kubernetes 클러스터' 서비스를 선택합니다.

Nexus Kubernetes 서비스를 검색하는 스크린샷.

  1. 검색을 사용하는 데 필요한 특정 'Nexus Kubernetes 클러스터' 리소스를 찾습니다.

Nexus Kubernetes 클러스터를 검색하는 스크린샷.

  1. 이름과 클러스터 이름을 일치시켜 올바른 리소스를 찾았으면 리소스를 선택하여 'Kubernetes 클러스터' 홈 페이지로 이동합니다.

Nexus Kubernetes 클러스터 홈페이지의 스크린샷.

  1. 해당 이름과 클러스터 이름을 일치시켜 올바른 리소스를 찾았으면 왼쪽 메뉴의 'Kubernetes 클러스터 노드' 섹션으로 이동합니다.

Nexus Kubernetes 클러스터 노드를 검색하는 스크린샷.

  1. 관심 있는 Kubernetes 노드 이름을 선택하여 세부 정보를 확인합니다.
  2. '연결된 네트워크' 탭을 확인하여 CNI 네트워크로 사용되는 노드의 '계층 3 네트워크'의 IP 주소를 찾습니다.

Nexus Kubernetes 클러스터 노드 네트워크를 검색하는 스크린샷.

다음 단계

Azure Operator Nexus Kubernetes 클러스터에 대해 자세히 알아보려면 다음 문서를 참조하세요.