이 문서에서는 AKS(Azure Kubernetes Service)와 Amazon EKS(Amazon Elastic Kubernetes Service)의 네트워킹 모드를 비교합니다. 이 문서에서는 AKS 클러스터의 관리되는 API 서버에 대한 연결 보안을 향상시키는 방법과 공용 네트워크 액세스를 제한하는 다양한 옵션에 대해 설명합니다.
참고 항목
이 문서는 Amazon EKS에 익숙한 전문가가 Azure Kubernetes Service(AKS)를 이해하는 데 도움이 되는 일련의 문서의 일부입니다.
Amazon EKS 네트워킹 모드
Amazon VPC(Amazon Virtual Private Cloud)를 사용하면 AWS(Amazon Web Services) 리소스를 퍼블릭 및 프라이빗 서브넷 또는 VPC의 IP 주소 범위로 구성된 가상 네트워크로 시작할 수 있습니다. 퍼블릭 서브넷은 인터넷에 연결해야 하는 리소스를 호스트하고, 프라이빗 서브넷은 공용 인터넷에 연결되지 않은 리소스를 호스트합니다. Amazon EKS는 퍼블릭 및 프라이빗 서브넷 모두에서 관리되는 노드 그룹을 프로비전할 수 있습니다.
엔드포인트 액세스 제어를 사용하면 공용 인터넷에서 또는 VPC를 통해 API 서버 엔드포인트에 연결할 수 있는지 여부를 구성할 수 있습니다. EKS는 클러스터 엔드포인트에 대한 액세스를 제어하는 여러 가지 방법을 제공합니다. 기본 퍼블릭 엔드포인트, 프라이빗 엔드포인트 또는 두 엔드포인트를 동시에 사용하도록 설정할 수 있습니다. 퍼블릭 엔드포인트를 사용하도록 설정하면 CIDR(Classless Inter-Domain Routing) 제한을 추가하여 퍼블릭 엔드포인트에 연결할 수 있는 클라이언트 IP 주소를 제한할 수 있습니다.
Amazon EKS 노드에서 관리되는 Kubernetes 컨트롤 플레인에 연결하는 방법은 클러스터에 대해 구성된 엔드포인트 설정에 따라 결정됩니다. 엔드포인트 설정은 언제든지 Amazon EKS 콘솔 또는 API를 통해 변경할 수 있습니다. 자세한 내용은 Amazon EKS 클러스터 엔드포인트 액세스 제어를 참조하세요.
퍼블릭 엔드포인트만
퍼블릭 엔드포인트를 통해 컨트롤 플레인을 공개하는 것은 새 Amazon EKS 클러스터의 기본 모드입니다. 클러스터에 대한 퍼블릭 엔드포인트만 사용하도록 설정되면 컨트롤 플레인 통신에 대한 작업자 노드와 같이 Amazon VPC 내에서 시작하는 Kubernetes API 요청은 VPC를 떠나지만 Amazon의 네트워크를 떠나지 않습니다. 노드에서 컨트롤 플레인에 연결하려면 공용 IP 주소와 인터넷 게이트웨이에 대한 경로 또는 NAT 게이트웨이의 공용 IP 주소를 사용할 수 있는 NAT(Network Address Translation) 게이트웨이에 대한 경로를 사용해야 합니다.
퍼블릭 및 프라이빗 엔드포인트
퍼블릭 엔드포인트와 프라이빗 엔드포인트가 모두 사용하도록 설정되면 VPC 내의 Kubernetes API 요청이 VPC의 Amazon EKS 관리형 ENI(Elastic Network Interfaces)를 통해 컨트롤 플레인과 통신합니다. 클러스터 API 서버는 인터넷에서 액세스할 수 있습니다.
프라이빗 엔드포인트만
프라이빗 엔드포인트만 사용하도록 설정되면 kubectl
또는 helm
명령과 같은 클러스터 API 서버에 대한 모든 트래픽은 클러스터의 VPC 또는 연결된 네트워크 내에서 나와야 합니다. 인터넷의 API 서버에 대한 공용 액세스는 사용하지 않도록 설정됩니다. 이 액세스 모드는 VPC에 대한 AWS VPN(AWS 가상 사설망) 또는 AWS DirectConnect를 사용하여 구현할 수 있습니다. AWS VPN 또는 DirectConnect 없이 엔드포인트에 대한 액세스를 제한하려면 더 많은 네트워킹을 설정하지 않고 CIDR 제한을 퍼블릭 엔드포인트에 추가하여 연결을 제한할 수 있습니다.
연결 옵션에 대한 자세한 내용은 프라이빗 전용 API 서버에 액세스를 참조하세요.
API 서버에 대한 AKS 네트워크 액세스
AKS, 프라이빗 AKS 클러스터 또는 권한 있는 IP 범위에서 Kubernetes API에 대한 네트워크 액세스를 보호하는 두 가지 옵션이 있습니다.
프라이빗 AKS 클러스터
AKS 프라이빗 클러스터는 API 서버와 노드 풀 간의 네트워크 트래픽이 가상 네트워크 내에 유지되도록 합니다. 프라이빗 AKS 클러스터에서 컨트롤 플레인 또는 API 서버에는 동일한 가상 네트워크에 있는 Azure 프라이빗 엔드포인트를 통해서만 액세스할 수 있는 내부 IP 주소가 있습니다. 동일한 가상 네트워크의 모든 VM(가상 머신)은 프라이빗 엔드포인트를 통해 컨트롤 플레인과 비공개로 통신할 수 있습니다. 컨트롤 플레인 또는 API 서버는 Azure 관리형 구독에서 호스트되지만, AKS 클러스터 및 해당 노드 풀은 고객의 구독에 있습니다.
다음 다이어그램에서는 프라이빗 클러스터 구성을 보여 줍니다.
이 아키텍처의 Visio 파일을 다운로드합니다.
프라이빗 AKS 클러스터를 프로비전하기 위해 AKS 리소스 공급자는 프라이빗 DNS 영역의 노드 리소스 그룹에 대한 프라이빗 FQDN(정규화된 도메인 이름)을 만듭니다. 필요에 따라 AKS는 해당 주소(A
) 레코드를 사용하여 퍼블릭 FQDN을 Azure 퍼블릭 DNS 영역에 만들 수도 있습니다. 에이전트 노드는 프라이빗 DNS 영역의 A
레코드를 사용하여 API 서버와의 통신을 위한 프라이빗 엔드포인트 IP 주소를 확인합니다.
AKS 리소스 공급자는 프라이빗 DNS 영역을 노드 리소스 그룹에 만들거나, 프라이빗 DNS 영역을 만들고 해당 리소스 ID를 프로비전 시스템에 전달할 수 있습니다. Azure, Bicep, ARM 템플릿, Azure CLI, Azure PowerShell 모듈 또는 Azure REST API에서 Terraform을 사용하여 클러스터를 만들 때 프라이빗 클러스터를 만들 수 있습니다.
프로비전하는 동안 또는 기존 클러스터에서 --enable-public-fqdn
매개 변수와 함께 az aks update 명령을 사용하여 API 서버에 대한 퍼블릭 FQDN을 사용하도록 설정할 수 있습니다. 퍼블릭 FQDN을 사용하도록 설정하는 경우 Azure DevOps 자체 호스트된 에이전트 또는 GitHub Actions 자체 호스팅 실행기와 같이 서버에 액세스하는 VM은 클러스터를 호스트하는 동일한 가상 네트워크에 있거나 가상 네트워크 피어링 또는 사이트 간 VPN을 통해 연결된 네트워크에 있어야 합니다.
프라이빗 AKS 클러스터의 경우 API 서버의 퍼블릭 FQDN을 사용하지 않도록 설정합니다. 프라이빗 컨트롤 플레인과 통신하려면 VM이 동일한 가상 네트워크에 있거나 프라이빗 DNS 영역에 대한 가상 네트워크 링크가 있는 피어링된 가상 네트워크에 있어야 합니다. 프라이빗 DNS 영역의 A
레코드는 API 서버의 FQDN을 기본 컨트롤 플레인과 통신하는 프라이빗 엔드포인트 IP 주소로 확인합니다. 자세한 내용은 프라이빗 Azure Kubernetes Service 클러스터 만들기를 참조하세요.
프라이빗 클러스터 배포 옵션
프라이빗 AKS 클러스터 배포를 사용자 지정하기 위해 AKS 리소스 공급자에서 공개하는 매개 변수는 다음과 같습니다.
authorizedIpRanges
(문자열)는 허용되는 IP 범위를 CIDR 형식으로 지정합니다.disableRunCommand
(Boolean)은 클러스터에 대한 명령을 사용하지 않도록 설정할run
지 여부를 지정합니다.enablePrivateCluster
(Boolean)은 클러스터를 프라이빗으로 만들지 여부를 지정합니다.enablePrivateClusterPublicFQDN
(Boolean)은 프라이빗 클러스터에 대한 다른 공용 FQDN을 만들지 여부를 지정합니다.privateDnsZone
(문자열)은 노드 리소스 그룹의 프라이빗 DNS 영역을 지정합니다. 값을 지정하지 않으면 리소스 공급자가 해당 영역을 만듭니다. 다음 값을 지정할 수 있습니다.- 기본값은
System
입니다. None
은 기본적으로 퍼블릭 DNS로 설정되므로 AKS에서 프라이빗 DNS 영역을 만들지 않습니다.<Your own private DNS zone resource ID>
는privatelink.<region>.azmk8s.io
또는<subzone>.privatelink.<region>.azmk8s.io.
형식으로 만든 프라이빗 DNS 영역을 사용합니다.
- 기본값은
다음 표에서는 프라이빗 AKS 클러스터를 배포하기 위한 DNS 구성 옵션을 보여 줍니다.
프라이빗 DNS 영역 옵션 | enablePrivateClusterPublicFQDN: true |
enablePrivateClusterPublicFQDN: false |
---|---|---|
System | 에이전트 노드 및 AKS 클러스터 가상 네트워크 또는 프라이빗 DNS 영역에 연결된 모든 가상 네트워크의 다른 모든 VM에서 프라이빗 DNS 영역 A 레코드를 사용하여 프라이빗 엔드포인트의 개인 IP 주소를 확인합니다.다른 모든 VM은 API 서버의 퍼블릭 FQDN을 사용합니다. |
에이전트 노드 및 AKS 클러스터 가상 네트워크 또는 프라이빗 DNS 영역에 연결된 모든 가상 네트워크의 다른 모든 VM에서 프라이빗 DNS 영역 A 레코드를 사용하여 프라이빗 엔드포인트의 개인 IP 주소를 확인합니다.퍼블릭 API 서버 FQDN은 사용할 수 없습니다. |
없음 | 에이전트 노드를 포함한 모든 VM에서 Azure 관리형 퍼블릭 DNS 영역의 A 레코드를 통해 사용할 수 있는 API 서버의 퍼블릭 FQDN을 사용합니다. |
잘못된 구성. API 서버의 이름 확인을 위해 프라이빗 AKS 클러스터에 적어도 하나의 퍼블릭 또는 프라이빗 DNS 영역이 필요합니다. |
사용자 고유의 프라이빗 DNS 영역 리소스 ID | 에이전트 노드 및 AKS 클러스터 가상 네트워크 또는 프라이빗 DNS 영역에 연결된 모든 가상 네트워크의 다른 모든 VM에서 프라이빗 DNS 영역 A 레코드를 사용하여 프라이빗 엔드포인트의 개인 IP 주소를 확인합니다.다른 모든 VM은 API 서버의 퍼블릭 FQDN을 사용합니다. |
에이전트 노드 및 AKS 클러스터 가상 네트워크 또는 프라이빗 DNS 영역에 연결된 모든 가상 네트워크의 다른 모든 VM에서 프라이빗 DNS 영역 A 레코드를 사용하여 프라이빗 엔드포인트의 개인 IP 주소를 확인합니다.퍼블릭 API 서버 FQDN은 사용할 수 없습니다. |
프라이빗 클러스터 연결 및 관리
프라이빗 클러스터에 대한 네트워크 연결을 설정할 경우, 몇 가지 옵션이 있습니다.
VM을 AKS 클러스터와 동일한 가상 네트워크에 만듭니다.
별도의 가상 네트워크에서 VM을 사용하고 AKS 클러스터 가상 네트워크와의 가상 네트워크 피어링을 설정합니다.
Azure ExpressRoute 또는 VPN 연결을 사용합니다.
az aks command invoke Azure CLI 명령을 사용하여 클러스터에 직접 연결하지 않고 프라이빗 클러스터에서
kubectl
및helm
명령을 실행합니다.Azure 프라이빗 엔드포인트 연결을 사용합니다.
프라이빗 AKS 클러스터는 동일한 가상 네트워크 또는 피어링된 가상 네트워크의 관리 VM에서 kubectl 명령줄 도구를 사용하여 관리할 수 있습니다.
동일한 가상 네트워크 또는 피어링된 가상 네트워크에서 Azure Bastion을 사용하여 jumpbox 관리 VM에 연결할 수 있습니다. Azure Bastion은 브라우저와 Azure Portal을 사용하여 VM에 연결할 수 있는 완전 관리형 PaaS(Platform as a Service)입니다. Azure Bastion은 Azure Portal에서 직접 TLS(전송 계층 보안)를 통해 안전하고 원활한 RDP(원격 데스크톱 프로토콜) 또는 SSH(Secure Shell) VM 연결을 제공합니다. VM이 Azure Bastion을 통해 연결되는 경우 공용 IP 주소, 에이전트 또는 특수 클라이언트 소프트웨어가 필요하지 않습니다.
또한 az aks command invoke를 사용하여 jumpbox VM에 연결할 필요 없이 프라이빗 AKS 클러스터에서 kubectl
또는 helm
명령을 실행할 수 있습니다.
권한 있는 IP 범위
클러스터 보안을 향상시키고 API 서버에 대한 공격을 최소화하는 두 번째 옵션은 권한 있는 IP 범위를 사용하는 것입니다. 권한 있는 IP는 퍼블릭 AKS 클러스터의 컨트롤 플레인에 대한 액세스를 알려진 IP 주소 및 CIDR 목록으로 제한합니다. 이 옵션을 사용하면 API 서버는 여전히 공개적으로 표시되지만 액세스는 제한됩니다. 자세한 내용은 AKS(Azure Kubernetes Service)에서 권한 있는 IP 주소 범위를 사용하는 안전한 API 서버 액세스를 참조하세요.
다음 az aks update
Azure CLI 명령은 권한을 IP 범위에 부여합니다.
az aks update \
--resource-group myResourceGroup \
--name myAKSCluster \
--api-server-authorized-ip-ranges 73.140.245.0/24
AKS 연결 고려 사항
AKS 프라이빗 클러스터는 권한 있는 IP보다 더 높은 보안 및 격리를 제공합니다. 그러나 기존 퍼블릭 AKS 클러스터를 프라이빗 클러스터로 변환할 수 없습니다. 권한 있는 IP를 기존 AKS 클러스터에 사용하도록 설정할 수 있습니다.
권한 있는 IP 범위를 프라이빗 API 서버 엔드포인트에 적용할 수 없습니다. 권한 있는 IP는 퍼블릭 API 서버에만 적용됩니다.
프라이빗 클러스터는 Azure DevOps 호스트된 에이전트를 지원하지 않습니다. 자체 호스트된 에이전트를 사용하는 것이 좋습니다.
Azure Container Registry에서 프라이빗 AKS 클러스터를 사용하도록 설정하려면 클러스터 가상 네트워크에서 컨테이너 레지스트리에 대한 프라이빗 링크를 설정합니다. 또는 Container Registry 가상 네트워크와 프라이빗 클러스터의 가상 네트워크 간에 피어링을 설정합니다.
Azure Private Link 서비스 제한은 프라이빗 클러스터에 적용됩니다.
프라이빗 클러스터의 고객 서브넷에서 프라이빗 엔드포인트를 삭제하거나 수정하면 클러스터의 작동이 중지됩니다.
참가자
Microsoft에서 이 문서를 유지 관리합니다. 원래 다음 기여자가 작성했습니다.
주요 작성자:
- Paolo Salvatori | 수석 서비스 엔지니어
- Martin Gjoshevski | 선임 서비스 엔지니어
- Laura Nicolas | 선임 소프트웨어 엔지니어
기타 기여자:
- Chad Kittel | 주 소프트웨어 엔지니어
- Ed Price | 선임 콘텐츠 프로그램 관리자
- Theano Petersen | 기술 작가
비공개 LinkedIn 프로필을 보려면 LinkedIn에 로그인합니다.
다음 단계
- Amazon EKS 전문가용 AKS
- Kubernetes ID 및 액세스 관리
- Kubernetes 모니터링 및 로깅
- Kubernetes 클러스터에 대한 스토리지 옵션
- Kubernetes에 대한 비용 관리
- Kubernetes 노드 및 노드 풀 관리
- 클러스터 거버넌스
관련 참고 자료
다음 참조는 보안 API를 사용하여 AKS 클러스터를 배포하기 위한 설명서 및 자동화 샘플에 대한 링크를 제공합니다.