AKS(Azure Kubernetes Service) 클러스터에 CanIPull 배포

CanIPull은 AKS(Azure Kubernetes Service) 위한 진단 도구입니다. 이 문서의 Azure Copilot 또는 전체 Kubernetes 매니페스트를 사용하여 배포합니다. CanIPull은 선택한 노드 하나에서 클러스터 ID 구성을 읽고, ACR(Azure Container Registry) 인증 서버에 대한 DNS 확인을 확인하고, 초기 ACR 토큰 교환의 유효성을 검사합니다.

이 문서에서는 Azure Copilot 또는 Kubernetes 매니페스트를 사용하여 CanIPull을 실행하는 방법을 보여줍니다. CanIPull v0.1.0은 한 번에 하나의 AMD64 Linux 노드에서만 실행됩니다. 지원되는 다른 노드에 대한 검사를 반복하여 연결 또는 구성을 비교합니다.

Important

CanIPull은 엔드 투 엔드 이미지 끌어오기 테스트가 아닙니다. CanIPull이 이미지를 선택하거나 끌어오지 않으므로 성공적인 결과는 리포지토리, 이미지 매니페스트 또는 이미지 계층에 대한 액세스를 확인하지 않습니다.

사전 요구 사항

이 작업을 시작하려면 다음이 필요합니다.

  • AMD64 Linux 노드가 하나 이상 있는 기존 AKS 클러스터입니다.
  • 테스트하려는 기존 ACR 인스턴스입니다.

Azure Copilot과 함께 CanIPull을 배포하려면 추가로 Azure 포털의 Azure Copilot에 대한 액세스 권한이 필요합니다.

CanIPull을 수동으로 배포하려면 다음이 필요합니다.

  • Azure CLI 설치됨.
  • AKS 클러스터에 대한 사용자 자격 증명을 가져와 ACR 인스턴스를 읽을 수 있는 권한이 있는 인증된 Azure CLI 세션입니다.
  • kubectl AKS 클러스터에 연결하도록 구성되었습니다.
  • 클러스터 범위에서 노드를 나열하고, default 네임스페이스에서 Pod를 생성, 조회, 나열, 감시 및 삭제하며, default 네임스페이스에서 Pod 로그를 조회하는 Kubernetes 권한.

Azure Copilot 사용하여 CanIPull 배포

Azure Copilot AKS 클러스터, AMD64 Linux 노드 및 ACR 인증 서버를 선택한 다음 CanIPull을 배포할 수 있습니다. 진단은 선택한 노드에서 DNS 확인 및 ACR 토큰 교환을 확인합니다. 리포지토리 또는 이미지를 선택하거나 액세스하지 않습니다.

  1. Azure 포털에서 Copilot 엽니다.
  2. 다음 프롬프트 중 하나를 입력합니다.
  • Help me deploy CanIPull to my AKS cluster.
  • Can an AMD64 Linux node in my AKS cluster resolve and authenticate to a specific Azure Container Registry?
  • Help me test ACR token exchange from an AMD64 Linux node in my AKS cluster.
  1. CANIPull을 실행할 AKS 클러스터 및 AMD64 Linux 노드를 선택합니다.
  2. DNS 및 토큰 교환 검사에 사용할 인증 서버의 ACR 인스턴스를 선택합니다.
  3. 선택 항목을 검토한 다음 배포를 확인합니다.
  4. 배포가 완료되면 프롬프트에 따라 실행 명령 창을 엽니다.
  5. DNS, 클러스터 ID 및 ACR 토큰 교환 결과에 대한 CanIPull 로그를 검토합니다.

이 환경에 대한 자세한 내용은 Azure Copilot CanIPull 사용을 참조하세요.

CanIPull을 수동으로 배포

CanIPull을 수동으로 배포하려면 클러스터에 연결하고, AMD64 Linux 노드를 선택하고, 정규화된 ACR 로그인 서버를 가져와서, 이 섹션에 제공된 전체 Pod 매니페스트를 다음과 같이 canipull.yaml저장하고 실행 kubectl apply --filename canipull.yaml합니다. 원샷 파드를 사용하여 대상 노드를 선택하고 kubectl로 진단 로그를 직접 확인할 수 있습니다.

Important

매니페스트는 선택한 노드에서 탑재됩니다 /etc/kubernetes/azure.json . 이 파일에는 중요한 클러스터 ID 구성이 포함되어 있습니다. 신뢰할 수 있는 클러스터 관리자인 경우에만 Pod를 배포합니다. 상위 수준이 액세스 토큰을 인쇄할 수 있으므로 CanIPull 세부 정보를 늘리지 마세요. 테스트를 완료하는 즉시 Pod를 삭제합니다.

클러스터에 연결하고 노드 선택

  1. AKS 클러스터 및 ACR 인스턴스에 대한 변수를 설정합니다.

    RESOURCE_GROUP=<resource-group>
    CLUSTER_NAME=<aks-cluster-name>
    ACR_NAME=<acr-name>
    
  2. 클러스터 자격 증명을 가져옵니다.

    az aks get-credentials \
      --resource-group $RESOURCE_GROUP \
      --name $CLUSTER_NAME
    
  3. ACR 로그인 서버를 가져옵니다. CanIPull에는 ACR 리소스 이름이 아닌 정규화된 로그인 서버(예: myregistry.azurecr.io)가 필요합니다.

    ACR_LOGIN_SERVER=$(az acr show \
      --name $ACR_NAME \
      --query loginServer \
      --output tsv)
    
    echo $ACR_LOGIN_SERVER
    
  4. AMD64 Linux 노드를 나열하고 진단 검사를 실행할 노드를 선택합니다. CanIPull v0.1.0 은 AMD64 노드만 지원합니다.

    kubectl get nodes \
      --selector kubernetes.io/os=linux,kubernetes.io/arch=amd64 \
      --output wide
    

전체 CanIPull 매니페스트 만들기 및 배포

  1. 전체 매니페스트를 이름이 지정된 canipull.yaml파일에 복사합니다. <acr-login-server> 및 <target-linux-node>을 이전 섹션의 노드 이름과 ACR 로그인 서버로 바꾸세요. 매니페스트는 CanIPull을 선택한 노드에 고정하고, 서비스 계정 토큰 탑재 및 권한 에스컬레이션을 사용하지 않도록 설정하고, 필요한 노드 구성을 읽기 전용으로 탑재합니다.

    apiVersion: v1
    kind: Pod
    metadata:
      name: canipull
      namespace: default
      labels:
        app: canipull
    spec:
      automountServiceAccountToken: false
      nodeName: <target-linux-node>
      restartPolicy: Never
      containers:
        - name: canipull
          image: mcr.microsoft.com/aks/canipull:v0.1.0
          imagePullPolicy: IfNotPresent
          args:
            - <acr-login-server>
          securityContext:
            allowPrivilegeEscalation: false
            capabilities:
              drop:
                - ALL
            readOnlyRootFilesystem: true
          volumeMounts:
            - name: azure-config
              mountPath: /etc/kubernetes/azure.json
              readOnly: true
      volumes:
        - name: azure-config
          hostPath:
            path: /etc/kubernetes/azure.json
            type: File
    
  2. Pod를 생성합니다.

    kubectl apply --filename canipull.yaml
    
  3. 파드가 끝날 때까지 기다립니다.

    kubectl get pod canipull --watch
    

    pod 상태가 또는 Completed로 변경되면 Error+를 누릅니다.

CanIPull 결과 검토

진단 출력을 봅니다.

kubectl logs canipull

성공적인 테스트에는 다음 결과가 포함됩니다.

  • ACR 인증 서버는 DNS를 통해 확인됩니다.
  • CanIPull은 노드에서 Azure 구성을 읽습니다.
  • 클러스터의 kubelet ID 또는 서비스 주체가 인증할 수 있습니다.
  • ACR은 초기 토큰 교환을 허용합니다.

이러한 결과는 선택한 노드가 ACR 인증 서버를 확인할 수 있고 클러스터 ID가 초기 토큰 교환을 완료할 수 있음을 확인합니다. CanIPull은 이미지를 끌어오거나 리포지토리, 이미지 매니페스트 또는 이미지 계층에 대한 액세스의 유효성을 검사하지 않습니다.

도구의 최종 성공 메시지는 테스트 범위보다 더 광범위한 단어를 사용하며 다음 출력과 유사합니다.

Your cluster can pull images from <acr-login-server>!

엔드투엔드 이미지 끌어오기를 확인하려면 대상 리포지토리의 이미지를 참조하는 워크로드를 배포합니다.

테스트가 실패하면 표시된 FAILED로그 줄을 검토합니다. 주요 원인은 다음과 같습니다.

  • ACR 인증 서버는 선택한 노드에서 확인되지 않습니다.
  • 선택한 노드에 /etc/kubernetes/azure.json이(가) 포함되어 있지 않습니다.
  • 클러스터 ID 자격 증명이 잘못되었습니다.
  • ACR은 kubelet ID 또는 서비스 주체에 대한 토큰 교환을 거부합니다.

ID가 ACR에 액세스할 수 있는 권한이 없기 때문에 토큰 교환이 실패하는 경우 AKS에서 ACR로 인증을 참조하세요.

자원을 정리하세요

CanIPull Pod를 삭제하고 노드 구성에 대한 액세스를 제거합니다.

kubectl delete pod canipull