컨테이너 네트워킹 개념

적용 대상: Azure Stack HCI 22H2의 AKS, Windows Server의 AKS

애플리케이션 구성 요소는 함께 작동하여 컨테이너 기반 마이크로 서비스 접근 방식에서 작업을 처리해야 합니다. Kubernetes는 애플리케이션 통신을 가능하게 하고 내부 또는 외부에서 애플리케이션에 연결하고 노출할 수 있는 리소스를 제공합니다. 애플리케이션 부하를 분산하여 고가용성 애플리케이션을 빌드할 수 있습니다.

더 복잡한 애플리케이션에는 SSL/TLS 종료 또는 여러 구성 요소의 라우팅에 대한 수신 트래픽 구성이 필요할 수 있습니다. 보안을 위해 Pod와 노드 간에 네트워크 트래픽의 흐름을 제한해야 할 수도 있습니다.

이 문서에서는 Arc에서 사용하도록 설정된 AKS의 애플리케이션에 네트워킹을 제공하는 핵심 개념을 소개합니다.

  • Kubernetes 서비스
  • 수신 컨트롤러
  • 네트워크 정책

Kubernetes 서비스

애플리케이션 워크로드에 대한 네트워크 구성을 간소화하기 위해 Kubernetes는 서비스를 사용하여 Pod 집합을 논리적으로 그룹화하고 네트워크 연결을 제공합니다. 사용할 수 있는 서비스 유형은 다음과 같습니다.

클러스터 IP: Kubernetes 클러스터 내에서 사용할 내부 IP 주소를 만듭니다. 클러스터 내의 다른 워크로드를 지원하는 내부 전용 애플리케이션에 클러스터 IP를 사용합니다.

AKS 클러스터의 클러스터 IP 트래픽 흐름을 보여 주는 다이어그램

NodePort: 노드 IP 주소 및 포트를 사용하여 애플리케이션에 직접 액세스할 수 있도록 기본 노드에 포트 매핑을 만듭니다.

AKS 클러스터의 NodePort 트래픽 흐름을 보여 주는 다이어그램

LoadBalancer: Azure 부하 분산 장치 리소스를 만들고, 외부 IP 주소를 구성하고, 요청된 Pod를 부하 분산 장치 백 엔드 풀에 연결합니다. 고객의 트래픽이 애플리케이션에 도달할 수 있도록 하기 위해 원하는 포트에 부하 분산 규칙을 만듭니다.

AKS 클러스터의 부하 분산 장치 트래픽 흐름을 보여 주는 다이어그램

인바운드 트래픽의 다른 제어 및 라우팅의 경우 수신 컨트롤러를 사용할 수 있습니다.

참고

네트워크를 다른 대상 클러스터와 공유하는 대상 클러스터를 배포하는 경우 부하 분산 장치 IP 주소 충돌이 발생할 수 있습니다. 이 문제는 동일한 AksHciClusterNetwork 개체를 공유하는 대상 클러스터에서 서로 다른 포트를 사용하는 두 개의 워크로드를 배포하는 경우에 발생할 수 있습니다. IP 주소 및 포트 매핑이 HA 프록시 내에 할당되는 방식 때문에 중복된 IP 주소 할당이 발생할 수 있습니다. 이 경우 워크로드를 다시 배포할 때까지 하나 또는 두 워크로드에서 임의 네트워크 연결 문제가 발생할 수 있습니다. 워크로드를 다시 배포할 때 각 워크로드가 별도의 서비스 IP 주소를 수신하도록 하는 동일한 포트를 사용하거나 다른 AksHciClusterNetwork 개체를 사용하는 대상 클러스터에 워크로드를 다시 배포할 수 있습니다.

ExternalName: 애플리케이션에 더 쉽게 액세스할 수 있도록 특정 DNS 항목을 만듭니다. 부하 분산 장치 및 서비스의 IP 주소는 전체 네트워크 설정에 따라 내부 또는 외부 주소일 수 있으며 동적으로 할당할 수 있습니다. 또는 사용할 기존 고정 IP 주소를 지정할 수 있습니다. 기존 고정 IP 주소는 종종 DNS 항목에 연결됩니다. 내부 부하 분산 장치에는 개인 IP 주소만 할당되므로 인터넷에서 액세스할 수 없습니다.

Azure Stack HCI의 Kubernetes 네트워킹 기본 사항

애플리케이션에 액세스하거나 애플리케이션 구성 요소가 서로 통신할 수 있도록 Kubernetes에서 추상화 계층을 가상 네트워킹에 제공합니다. Kubernetes 노드는 가상 네트워크에 연결되며 Pod에 대한 인바운드 및 아웃바운드 연결을 제공할 수 있습니다. 각 노드에서 실행되는 kube-proxy 구성 요소는 이러한 네트워크 기능을 제공합니다.

Kubernetes에서 Services는 다음을 허용하도록 논리적으로 Pod를 그룹화합니다.

  • 단일 IP 주소 또는 DNS 이름 및 특정 포트를 통해 직접 액세스합니다.
  • 동일한 서비스 또는 애플리케이션을 호스팅하는 여러 Pod 간에 부하 분산 장치를 사용하여 트래픽을 분산합니다.

또한 Azure Stack HCI 플랫폼은 고가용성 방식으로 "언더레이" 네트워크를 제공하여 Azure Stack HCI 클러스터의 AKS에 대한 가상 네트워킹을 간소화하는 데 도움이 됩니다. AKS 클러스터를 만들 때 기본 HAProxy 부하 분산 장치 리소스도 만들고 구성합니다. Kubernetes 클러스터에 애플리케이션을 배포할 때 IP 주소는 Pod 및 Kubernetes 서비스에 대해 이 부하 분산 장치의 엔드포인트로 구성됩니다.

IP 주소 리소스

애플리케이션 워크로드에 대한 네트워크 구성을 간소화하기 위해 AKS Arc는 배포에서 다음 개체에 IP 주소를 할당합니다.

  • Kubernetes 클러스터 API 서버: API 서버는 Kubernetes API를 노출하는 Kubernetes 컨트롤 플레인의 구성 요소입니다. API 서버는 Kubernetes 컨트롤 플레인의 프런트 엔드입니다. 고정 IP 주소는 기본 네트워킹 모델에 관계없이 항상 API 서버에 할당됩니다.
  • Kubernetes 노드(가상 머신): Kubernetes 클러스터는 노드라는 작업자 컴퓨터 집합으로 구성되며 노드는 컨테이너화된 애플리케이션을 호스트합니다. 컨트롤 플레인 노드 외에도 모든 클러스터에는 하나 이상의 작업자 노드가 있습니다. AKS 클러스터의 경우 Kubernetes 노드는 가상 머신으로 구성됩니다. 이러한 가상 머신은 Azure Stack HCI에서 고가용성 가상 머신으로 만들어집니다. 자세한 내용은 노드 네트워킹 개념을 참조하세요.
  • Kubernetes 서비스: Kubernetes에서 Services 는 단일 IP 주소 또는 특정 포트의 DNS 이름을 통해 직접 액세스할 수 있도록 논리적으로 Pod IP 주소를 그룹화합니다. 또한 서비스는 부하 분산 장치를 사용하여 트래픽을 분산할 수 있습니다. 고정 IP 주소는 기본 네트워킹 모델에 관계없이 항상 Kubernetes 서비스에 할당됩니다.
  • HAProxy 부하 분산 장치: HAProxy 는 들어오는 요청을 여러 엔드포인트에 분산하는 TCP/HTTP 부하 분산 장치 및 프록시 서버입니다. Azure Stack HCI 배포의 AKS에 있는 모든 워크로드 클러스터에는 HAProxy 부하 분산 장치가 배포되어 특수 가상 머신으로 구성됩니다.
  • Microsoft 온-프레미스 클라우드 서비스: 온-프레미스 Azure Stack HCI 클러스터 또는 Windows Server 클러스터에서 Kubernetes를 호스팅하는 가상화된 환경을 만들고 관리할 수 있는 Azure Stack HCI 클라우드 공급자입니다. 네트워킹 모델 다음에 Azure Stack HCI 또는 Windows Server 클러스터가 Microsoft 온-프레미스 클라우드 서비스에서 사용하는 IP 주소 할당 방법을 결정합니다. Microsoft 온-프레미스 클라우드 서비스에서 구현하는 네트워킹 개념에 대한 자세한 내용은 노드 네트워킹 개념을 참조하세요.

Kubernetes 네트워크

Azure Stack HCI의 AKS에서 다음 네트워크 모델 중 하나를 사용하는 클러스터를 배포할 수 있습니다.

  • Flannel Overlay 네트워킹 - 네트워크 리소스는 일반적으로 클러스터가 배포될 때 만들어지고 구성됩니다.
  • Project Calico 네트워킹 - 이 모델은 네트워크 정책 및 흐름 제어와 같은 추가 네트워킹 기능을 제공합니다.

두 네트워킹 구현 모두 오버레이 네트워크 구성 모델을 사용합니다. 이 모델은 데이터 센터 네트워킹의 나머지 부분과 연결이 끊어진 IP 주소 할당을 제공합니다.

오버레이 네트워킹에 대한 자세한 내용은 소개: Windows용 Kubernetes 오버레이 네트워킹을 참조하세요.

Calico 네트워크 플러그 인 및 정책에 대한 자세한 내용은 Calico 네트워크 정책 시작을 검사.

네트워킹 모델 비교

플 란 넬

Flannel은 컨테이너용으로 특별히 설계된 가상 네트워킹 계층입니다. Flannel은 호스트 네트워크를 오버레이하는 플랫 네트워크를 만듭니다. 모든 컨테이너/Pod에는 이 오버레이 네트워크에서 하나의 IP 주소가 할당되고 서로의 IP 주소에 연결하여 직접 통신합니다.

Calico

Calico는 컨테이너, 가상 머신 및 네이티브 호스트 기반 워크로드를 위한 오픈 소스 네트워킹 및 네트워크 보안 솔루션입니다. Calico는 Linux eBPF 데이터 평면, Linux 네트워킹 데이터 평면 및 Windows HNS 데이터 평면을 비롯한 여러 데이터 평면을 지원합니다.

기능

기능 플 란 넬 Calico
네트워크 정책
IPv6
사용된 레이어 L2(VxLAN) L2(VxLAN)
기존 또는 새 가상 네트워크에 클러스터 배포 Yes Yes
Windows 지원 Yes Yes
Pod-Pod 연결 Yes Yes
Pod-VM 연결, 동일한 네트워크의 VM
Pod-VM 연결, 다른 네트워크의 VM Yes Yes
Kubernetes 서비스 Yes Yes
부하 분산 장치를 통해 노출 Yes Yes
네트워크 다중 디먼이 있는 동일한 클러스터의 많은 네트워크 동일한 클러스터의 많은 네트워크
배포 Linux: DaemonSet Linux: DaemonSet
Windows: 서비스 Windows: 서비스
명령 줄 없음 calicoctl

중요

현재 기본 선택은 오버레이 네트워킹 모드에서 Calico를 사용하는 것입니다. Flannel을 -primaryNetworkPlugin 사용하도록 설정하려면 PowerShell 명령의 매개 변수를 New-AksHciCluster 사용하고 를 값으로 지정 flannel 합니다. 이 값은 클러스터를 배포한 후에는 변경할 수 없으며 Windows 및 Linux 클러스터 노드 모두에 적용됩니다.

예를 들면 다음과 같습니다.

New-AksHciCluster -name MyCluster -primaryNetworkPlugin 'flannel'

다음 단계

이 문서에서는 Azure Stack HCI의 AKS 노드에 있는 컨테이너에 대한 네트워킹 개념을 다룹니다. Azure Stack HCI 개념의 AKS에 대한 자세한 내용은 다음 문서를 참조하세요.