다음을 통해 공유


Azure Virtual Network 컨테이너 네트워크 인터페이스 플러그 인 배포

Azure Virtual Network CNI(컨테이너 네트워크 인터페이스) 플러그 인은 Azure 가상 머신에 설치되며 Kubernetes Pod 및 Docker 컨테이너에 가상 네트워크 기능을 제공합니다. 플러그 인에 대한 자세한 내용은 컨테이너에서 Azure Virtual Network 기능을 사용하도록 설정하세요. 또한 AKS 컨테이너를 가상 네트워크에 자동으로 배치하는 고급 네트워킹 옵션을 선택하여 AKS(Azure Kubernetes Service)와 함께 플러그 인을 사용할 수 있습니다.

Azure Container Service-Engine Kubernetes 클러스터용 플러그 인 배포

Azure Container Service-Engine은 Azure Resource Manager 템플릿을 사용하여 Kubernetes 클러스터를 배포합니다. 클러스터 구성은 템플릿 생성 시 도구로 전달되는 JSON 파일에서 지정됩니다. 지원되는 클러스터 설정의 전체 목록 및 해당 설명에 대한 자세한 내용은 Microsoft Azure Container Service Engine - 클러스터 정의를 참조 하세요. 플러그 인은 Azure Container Service-Engine을 사용하여 만든 클러스터에 대한 기본 네트워킹 플러그 인입니다. 다음 네트워크 구성 설정은 플러그 인을 구성할 때 중요합니다.

설정 설명
firstConsecutiveStaticIP 기본 노드에 할당되는 IP 주소입니다. 이 설정은 필수입니다.
kubernetesConfig의 clusterSubnet 클러스터가 배포되고 IP 주소가 Pod에 할당되는 가상 네트워크 서브넷의 CIDR
masterProfile의 vnetSubnetId 클러스터를 배포할 서브넷의 Azure Resource Manager 리소스 ID를 지정합니다.
vnetCidr 클러스터가 배포된 가상 네트워크의 CIDR
kubeletConfig의 max-Pod 모든 에이전트 가상 머신의 최대 Pod 수입니다. 플러그 인의 경우 기본값은 30입니다. 최대 250개까지 지정할 수 있습니다.

구성 예

아래 json 예제는 다음 속성이 적용되는 클러스터용입니다.

  • 기본 노드 1개와 에이전트 노드 2개

  • 기본 및 에이전트 노드가 모두 있는 KubeClusterSubnet(10.0.0.0/20) 서브넷에 배포됩니다.

{
  "apiVersion": "vlabs",
  "properties": {
    "orchestratorProfile": {
      "orchestratorType": "Kubernetes",
      "kubernetesConfig": {
        "clusterSubnet": "10.0.0.0/20" --> Subnet allocated for the cluster
      }
    },
    "masterProfile": {
      "count": 1,
      "dnsPrefix": "ACSKubeMaster",
      "vmSize": "Standard_A2",
      "vnetSubnetId": "/subscriptions/<subscription ID>/resourceGroups/<Resource Group Name>/providers/Microsoft.Network/virtualNetworks/<Vnet Name>/subnets/KubeClusterSubnet",
      "firstConsecutiveStaticIP": "10.0.1.50", --> IP address allocated to the Master node
      "vnetCidr": "10.0.0.0/16" --> Virtual network address space
    },
    "agentPoolProfiles": [
      {
        "name": "k8sagentpoo1",
        "count": 2,
        "vmSize": "Standard_A2_v2",
"vnetSubnetId": "/subscriptions/<subscription ID>/resourceGroups/<Resource Group Name>/providers/Microsoft.Network/virtualNetworks/<VNet Name>/subnets/KubeClusterSubnet",
        "availabilityProfile": "AvailabilitySet"
      }
    ],
    "linuxProfile": {
      "adminUsername": "KubeServerAdmin",
      "ssh": {
        "publicKeys": [
          {…}
        ]
      }
    },
    "servicePrincipalProfile": {
      "clientId": "dd438987-aa12-4754-b47d-375811889714",
      "secret": "azure123"
    }
  }
}

Kubernetes 클러스터에 대한 플러그 인 배포

Kubernetes 클러스터의 모든 Azure 가상 머신에 플러그 인을 설치하려면 다음 단계를 완료합니다.

  1. 플러그 인을 다운로드하고 설치합니다.

  2. Pod에 IP 주소를 할당할 모든 가상 머신에서 가상 네트워크 IP 주소 풀을 미리 할당합니다. 모든 Azure 가상 머신의 각 네트워크 인터페이스에서는 기본 가상 네트워크 개인 IP 주소가 제공됩니다. Pod에 대한 IP 주소 풀은 다음 옵션 중 하나를 사용하여 가상 머신 네트워크 인터페이스에서 보조 주소(ipconfigs)로 추가됩니다.

    가상 머신에서 표시할 것으로 예상되는 모든 Pod에 대해 충분한 IP 주소를 추가해야 합니다.

  3. 클러스터 생성 중에 kubelet에 –network-plugin=cni를 전달하여 클러스터에 네트워킹 기능을 제공할 플러그 인을 선택합니다. Kubernetes는 기본적으로 플러그 인과 구성 파일이 이미 설치되어 있는 디렉터리에서 이러한 항목을 찾습니다.

  4. Pod가 인터넷에 액세스하도록 하려면 Linux 가상 머신에 다음 iptables 규칙을 원본 NAT 인터넷 트래픽에 추가합니다. 다음 예제에서 지정된 IP 범위는 10.0.0.0/8입니다.

    iptables -t nat -A POSTROUTING -m iprange ! --dst-range 168.63.129.16 -m
    addrtype ! --dst-type local ! -d 10.0.0.0/8 -j MASQUERADE
    

    규칙은 지정된 IP 범위로 전송되지 않는 트래픽에 대해 NAT을 수행합니다. 이전 범위를 벗어난 모든 트래픽은 인터넷 트래픽이라고 가정합니다. 가상 머신의 가상 네트워크, 피어된 가상 네트워크 및 온-프레미스 네트워크의 IP 범위를 지정하도록 선택할 수 있습니다.

    Windows 가상 머신은 가상 머신이 속한 서브넷 외부의 대상이 있는 NAT 트래픽을 자동으로 원본으로 지정합니다. 사용자 지정 IP 범위를 지정할 수는 없습니다.

이전 단계를 완료하고 나면 Kubernetes 에이전트 가상 머신에 표시된 Pod에 가상 네트워크의 개인 IP 주소가 자동으로 할당됩니다.

Docker 컨테이너용 플러그 인 배포

  1. 플러그 인을 다운로드하고 설치합니다.

  2. 다음 명령을 사용하여 Docker 컨테이너를 만듭니다.

    ./docker-run.sh \<container-name\> \<container-namespace\> \<image\>
    

컨테이너는 할당된 풀에서 IP 주소를 자동으로 수신하기 시작합니다. Docker 컨테이너로 트래픽을 부하 분산하려면 부하 분산 장치 프로브가 있는 소프트웨어 부하 분산 장치 뒤에 배치해야 합니다.

CNI 네트워크 구성 파일

CNI 네트워크 구성 파일은 JSON 형식으로 설명됩니다. 기본적으로 Linux 및 c:\cni\netconf Windows용으로 제공됩니다/etc/cni/net.d. 이 파일은 플러그 인의 구성을 지정하며 Windows 및 Linux의 경우 다릅니다. 다음은 샘플 Linux 구성 파일과 몇 가지 주요 설정에 대한 설명입니다. 이 파일은 변경하지 않아도 됩니다.

{
	   "cniVersion":"0.3.0",
	   "name":"azure",
	   "plugins":[
	      {
	         "type":"azure-vnet",
	         "mode":"bridge",
	         "bridge":"azure0",
	         "ipam":{
	            "type":"azure-vnet-ipam"
	         }
	      },
	      {
	         "type":"portmap",
	         "capabilities":{
	            "portMappings":true
	         },
	         "snat":true
	      }
	   ]
}

설정 설명

  • "cniVersion": Azure Virtual Network CNI 플러그 인은 CNI 사양 버전 0.3.0 및 0.3.1을 지원합니다.

  • "name": 네트워크의 이름입니다. 이 속성은 원하는 고유한 값으로 설정할 수 있습니다.

  • "type": 네트워크 플러그 인의 이름입니다. azure-vnet으로 설정합니다.

  • "mode": 작동 모드입니다. 이 필드는 선택적입니다. 지원되는 모드는 “bridge”뿐입니다. 자세한 내용은 운영 모드를 참조 하세요.

  • "bridge": 가상 네트워크에 컨테이너를 연결하는 데 사용할 브리지의 이름입니다. 이 필드는 선택적입니다. 이 필드에 내용을 입력하지 않으면 플러그 인은 기본 인터페이스 인덱스를 기준으로 하여 고유한 이름을 자동으로 선택합니다.

  • "ipam" - "type": IPAM 플러그 인의 이름입니다. 항상 azure-vnet-ipam으로 설정합니다.

플러그 인 다운로드 및 설치

GitHub에서 플러그 인을 다운로드합니다. 사용 중인 플랫폼에 대한 최신 버전을 다운로드합니다.

Linux 또는 Windows용 설치 스크립트를 컴퓨터에 복사합니다. 스크립트를 컴퓨터의 scripts 디렉터리에 저장하고 Linux 또는 install-cni-plugin.ps1 Windows용 파일 install-cni-plugin.sh 의 이름을 지정합니다.

플러그 인을 설치하려면 사용 중인 플러그 인 버전을 지정하여 플랫폼에 적합한 스크립트를 실행합니다. 예를 들어 v1.4.20을 지정할 수 있습니다. Linux 설치의 경우 v1.0.1과 같은 적절한 CNI 플러그 인 버전을 제공합니다.

scripts/install-cni-plugin.sh [azure-cni-plugin-version] [cni-plugin-version]
scripts\\ install-cni-plugin.ps1 [azure-cni-plugin-version]

위의 스크립트는 /opt/cni/bin(Linux) 및 c:\cni\bin(Windows)에 플러그 인을 설치합니다. 설치된 플러그 인에는 설치 후 작동하는 간단한 네트워크 구성 파일이 함께 제공됩니다. 업데이트할 필요가 없습니다. 파일의 설정에 대해 자세히 알아보려면 CNI 네트워크 구성 파일을 참조하세요.