Azure Portal에서 가상 노드를 사용하는 AKS(Azure Kubernetes Service) 클러스터 만들기 및 구성

가상 노드를 사용하면 ACI(Azure Container Instances)에서 실행되는 Pod와 AKS(Azure Kubernetes Service) 클러스터 간에 네트워크 통신이 가능합니다. 이 통신을 제공하기 위해 가상 네트워크 서브넷이 만들어지고 위임된 사용 권한이 할당됩니다. 가상 노드는 ‘고급’ 네트워킹(Azure CNI)을 사용하여 만든 AKS 클러스터에서만 작동합니다. AKS 클러스터는 기본적으로 기본 네트워킹(kubenet)을 사용하여 만들어집니다.

이 문서에서는 가상 네트워크 및 서브넷을 만든 다음 Azure Portal을 사용하여 고급 네트워킹을 사용하는 AKS 클러스터를 배포하는 방법을 안내합니다.

참고 항목

가상 노드 지역 가용성 및 제한 사항에 대한 개요는 AKS에서 가상 노드 사용을 참조하세요.

시작하기 전에

구독에 등록된 ACI 서비스 공급자가 필요합니다.

  • az provider list 명령을 사용하여 ACI 공급자 등록 상태를 확인합니다.

    az provider list --query "[?contains(namespace,'Microsoft.ContainerInstance')]" -o table
    

    다음 예제 출력은 Microsoft.ContainerInstance 공급자가 Registered임을 보여줍니다.

    Namespace                    RegistrationState    RegistrationPolicy
    ---------------------------  -------------------  --------------------
    Microsoft.ContainerInstance  Registered           RegistrationRequired
    
  • 공급자가 NotRegistered인 경우 az provider register 명령을 사용하여 등록합니다.

    az provider register --namespace Microsoft.ContainerInstance
    

AKS 클러스터 만들기

  1. Azure Portal 홈페이지로 이동합니다.
  2. 리소스 만들기>컨테이너를 선택합니다.
  3. AKS(Azure Container Service) 리소스에서 만들기를 선택합니다.
  4. 기본 페이지에서 다음 옵션을 구성합니다.
    • 프로젝트 세부 정보: Azure 구독을 선택하고 myResourceGroup 같은 Azure 리소스 그룹을 선택하거나 만듭니다.
    • 클러스터 세부 정보: myAKSCluster 같은 Kubernetes 클러스터 이름을 입력합니다. AKS 클러스터에 대한 지역 및 Kubernetes 버전을 선택합니다.
  5. 다음: 노드 풀을 선택하고 *가상 노드 사용에 체크 표시합니다. Screenshot that shows creating a cluster with virtual nodes enabled on the Azure portal. The option 'Enable virtual nodes' is highlighted.
  6. 검토 + 만들기를 선택합니다.
  7. 유효성 검사가 완료되면 만들기를 선택합니다.

기본적으로 이 프로세스는 클러스터 통신 및 다른 Azure 서비스와의 통합에 사용되는 관리형 클러스터 ID를 만듭니다. 자세한 내용은 관리 ID 사용을 참조하세요. 또한 서비스 주체를 클러스터 ID로 사용할 수 있습니다.

이 프로세스는 고급 네트워킹을 위한 클러스터 및 가상 노드를 자체 Azure 가상 네트워크 서브넷을 사용하도록 구성합니다. 이 서브넷은 AKS 클러스터 간에 Azure 리소스를 연결할 수 있는 위임된 권한을 갖습니다. 위임된 서브넷이 아직 없는 경우 Azure Portal은 가상 노드를 사용하여 Azure 가상 네트워크 및 서브넷을 만들고 구성합니다.

클러스터에 연결

Azure Cloud Shell은 이 문서의 단계를 실행하는 데 무료로 사용할 수 있는 대화형 셸입니다. 공용 Azure 도구가 사전 설치되어 계정에서 사용하도록 구성되어 있습니다. Kubernetes 클러스터를 관리하려면 Kubernetes 명령줄 클라이언트인 kubectl을 사용하세요. kubectl 클라이언트가 Azure Cloud Shell에 사전 설치됩니다.

  1. az aks get-credentials 명령을 사용하여 Kubernetes 클러스터에 연결하도록 kubectl을 구성합니다. 다음 예제는 myResourceGroup이라는 리소스 그룹에서 myAKSCluster라는 클러스터의 자격 증명을 가져옵니다.

    az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
    
  2. kubectl get nodes 명령을 사용하여 클러스터에 대한 연결을 확인합니다.

    kubectl get nodes
    

    다음 예제 출력은 생성된 단일 VM 노드 및 virtual-node-aci-linux라는 가상 Linux 노드를 보여 줍니다.

    NAME                           STATUS    ROLES     AGE       VERSION
    virtual-node-aci-linux         Ready     agent     28m       v1.11.2
    aks-agentpool-14693408-0       Ready     agent     32m       v1.11.2
    

샘플 앱 배포

  1. Azure Cloud Shell에서 virtual-node.yaml이라는 파일을 만들고 다음 YAML에 복사합니다.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: aci-helloworld
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: aci-helloworld
      template:
        metadata:
          labels:
            app: aci-helloworld
        spec:
          containers:
          - name: aci-helloworld
            image: mcr.microsoft.com/azuredocs/aci-helloworld
            ports:
            - containerPort: 80
          nodeSelector:
            kubernetes.io/role: agent
            beta.kubernetes.io/os: linux
            type: virtual-kubelet
          tolerations:
          - key: virtual-kubelet.io/provider
            operator: Exists
    

    YAML은 nodeSelectortoleration을 정의합니다. 그러면 가상 노드에서 Pod를 예약할 수 있습니다. Pod에는 가상 노드에 사용하도록 위임된 Azure 가상 네트워크 서브넷의 내부 IP 주소가 할당됩니다.

  2. kubectl apply 명령을 사용하여 애플리케이션을 실행합니다.

    kubectl apply -f virtual-node.yaml
    
  3. -o wide 인수와 함께 kubectl get pods 명령을 사용하여 노드에서 예약된 Pod를 봅니다.

    kubectl get pods -o wide
    

    다음 예제 출력은 virtual-node-linux 노드에서 예약된 virtual-node-helloworld Pod를 보여줍니다.

    NAME                                     READY     STATUS    RESTARTS   AGE       IP           NODE
    virtual-node-helloworld-9b55975f-bnmfl   1/1       Running   0          4m        10.241.0.4   virtual-node-aci-linux
    

참고 항목

Azure Container Registry에 저장된 이미지를 사용하는 경우 Kubernetes 비밀을 구성하고 사용합니다. 가상 노드의 제한 사항은 통합 Microsoft Entra 서비스 주체 인증을 사용할 수 없다는 것입니다. 비밀을 사용하지 않으면 가상 노드에서 예약된 Pod가 시작되지 않고 오류 HTTP response status code 400 error code "InaccessibleImage"가 보고됩니다.

가상 노드 Pod 테스트

가상 노드에서 실행되는 Pod를 테스트하려면 웹 클라이언트를 사용하여 데모 애플리케이션으로 이동합니다. Pod에는 내부 IP 주소가 할당되므로 AKS 클러스터의 다른 Pod에서 연결을 쉽게 테스트할 수 있습니다.

  1. 테스트 Pod를 만들고 다음 kubectl run 명령을 사용하여 터미널 세션을 연결합니다.

    kubectl run -it --rm virtual-node-test --image=mcr.microsoft.com/dotnet/runtime-deps:6.0
    
  2. 다음 apt-get 명령을 사용하여 Pod에 curl을(를) 설치합니다.

    apt-get update && apt-get install -y curl
    
  3. 다음 curl 명령을 사용하여 Pod의 주소에 액세스하고 내부 IP 주소를 제공합니다.

    curl -L http://10.241.0.4
    

    다음 압축된 예제 출력은 데모 애플리케이션을 보여 줍니다.

    <html>
    <head>
      <title>Welcome to Azure Container Instances!</title>
    </head>
    [...]
    
  4. exit을(를) 사용하여 테스트 Pod에 대한 터미널 세션을 닫고 Pod도 삭제합니다.

    exit
    

다음 단계

이 문서에서는 가상 노드에서 Pod를 예약하고 프라이빗 내부 IP 주소를 할당했습니다. 그 대신 서비스 배포를 만들고 부하 분산 장치 또는 수신 컨트롤러를 통해 Pod로 트래픽을 라우팅할 수도 있습니다. 자세한 내용은 AKS에서 기본 수신 컨트롤러 만들기를 참조하세요.

가상 노드는 AKS에서 크기 조정 솔루션의 구성 요소 중 하나입니다. 크기 조정 솔루션에 대한 자세한 내용은 다음 문서를 참조하세요.