이 가이드에서는 AKS(Azure Kubernetes Service) 클러스터의 API 서버에 연결하기 위한 다양한 옵션을 설명합니다. 표준 AKS 클러스터를 사용하면 API 서버가 인터넷을 통해 노출됩니다. 프라이빗 AKS 클러스터를 만드는 경우 프라이빗 클러스터에 대한 네트워크 연결이 있는 디바이스에서만 API 서버에 연결할 수 있습니다.
API 서버에 대한 액세스를 계획하는 것이 0일 차 작업입니다. API 서버에 액세스하는 방법은 배포 시나리오에 따라 달라집니다.
AKS API 서버 액세스
AKS 클러스터를 관리하려면 해당 API 서버와 상호 작용합니다. API 서버에 대한 액세스를 잠그고 필요한 사용자에게만 액세스 권한을 부여하는 것이 중요합니다. AKS 클러스터를 Microsoft Entra ID와 통합하여 세분화된 액세스를 제공할 수 있습니다. 그런 다음 관리자는 RBAC(역할 기반 액세스 제어)를 사용하여 액세스를 제한할 수 있습니다. 관리자는 RBAC를 통해 Microsoft Entra 그룹에 사용자 및 ID를 배치하고 그룹에 적절한 역할 및 권한을 할당할 수 있습니다. Microsoft Entra 인증은 OpenID 커넥트 사용하여 AKS 클러스터에 제공됩니다. 자세한 내용은 다음 리소스를 참조하세요.
참고 항목
권한 있는 IP 주소 범위만 API 서버와 통신하도록 허용하여 AKS 클러스터를 추가로 잠글 수 있습니다. 자세한 내용은 AKS(Azure Kubernetes Service)에서 권한 있는 IP 주소 범위를 사용하는 안전한 API 서버 액세스를 참조하세요.
애플리케이션 설계 모범 사례와 결합된 Azure DDoS Protection은 향상된 DDoS 완화 기능을 제공하여 DDoS 공격에 대한 방어력을 높입니다. 경계 가상 네트워크에서 Azure DDOS Protection을 사용하도록 설정해야 합니다.
인터넷을 통해 AKS 클러스터에 액세스
API 서버의 FQDN(정규화된 도메인 이름)으로 확인되는 프라이빗이 아닌 클러스터를 만들 때 기본적으로 API 서버에는 공용 IP 주소가 할당됩니다. 그런 다음 Azure 포털을 사용하여 클러스터에 연결하거나 Azure CLI, PowerShell 또는 명령 프롬프트와 같은 셸을 사용할 수 있습니다.
참고
Kubernetes 명령줄 클라이언트 kubectl
을 사용하여 인터넷을 통해 클러스터에 연결하는 방법에 대한 자세한 내용은 클러스터에 연결을 참조하세요.
Azure Cloud Shell
Cloud Shell은 Azure Portal에 기본 제공되는 셸입니다. PowerShell 또는 Azure CLI에서 수행하는 것과 동일한 방식으로 Cloud Shell에서 Azure 리소스를 관리하고 연결할 수 있습니다. 자세한 내용은 Azure Cloud Shell 개요를 참조하세요.
AKS 프라이빗 클러스터에 액세스
AKS 프라이빗 클러스터에 연결하는 방법에는 여러 가지가 있습니다. AKS 프라이빗 클러스터에 액세스하는 방법을 계획하는 것은 시나리오의 요구 사항 및 제한 사항에 따라 달라지는 0일 차 작업입니다. 다음 구성 요소 및 서비스를 사용하여 프라이빗 클러스터에 연결할 수 있습니다.
- 점프 상자 점프 상자를 서브넷에 배포하고 작업 워크스테이션으로 사용할 수 있습니다. 점프 상자의 경우 가용성 집합에서 독립 실행형 영구적 VM(가상 머신)을 사용할 수 있습니다. 또한 Azure Virtual Machine Scale Sets를 사용할 수도 있습니다.
- Azure Bastion
- VPN(가상 사설망)
- Azure ExpressRoute.
- AKS를 관리하기 위해 Azure CLI aks 명령을 호출합니다.
- 클러스터의 API 서버에 연결된 서브넷에 배포되는 Cloud Shell 인스턴스입니다.
- Azure Virtual Desktop 팀이 다양한 운영 체제에서 원격으로 연결하는 경우 이 서비스를 통해 점프 상자로 사용하는 Windows VM에 대한 액세스를 제공할 수 있습니다.
- Azure Container Instances 및 OpenSSH-호환 SSH(Secure Shell) 클라이언트
참고
SSH, RDP(원격 데스크톱 프로토콜), RDS(원격 데스크톱 서비스)는 점프 상자를 원격으로 제어하는 데 사용할 수 있는 대체 프로토콜입니다.
Azure Bastion 사용
Azure Bastion은 점프 상자와 같은 해당 네트워크의 VM에 연결하기 위해 가상 네트워크 내에 배포하는 PaaS(Platform as a Service) 제품입니다. 연결하려면 Azure 포털 내의 브라우저에서 RDP 또는 SSH를 사용합니다. TLS(전송 계층 보안) 프로토콜은 연결을 보호합니다. 일반적으로 VM의 NIC(네트워크 인터페이스 카드)와 연결된 공용 IP 주소가 있습니다. 이 주소는 VM에 연결하는 방법을 제공합니다. Azure Bastion을 사용하는 경우에는 더 이상 공용 IP 주소를 점프 상자와 연결할 필요가 없습니다.
AKS 클러스터의 API 서버에 연결할 때는 신뢰할 수 있는 연결을 사용하는 것이 가장 좋습니다. 한 가지 옵션은 Azure Bastion을 사용하여 Azure 환경 내에 있는 점프 상자에 연결하는 것입니다. 이 시나리오에서 점프 상자는 허브 가상 네트워크에 있습니다. 프라이빗 AKS 클러스터는 스포크 가상 네트워크에 있습니다. 가상 네트워크 피어링은 허브 및 스포크 네트워크를 연결합니다.
점프 상자는 Azure 프라이빗 엔드포인트, 프라이빗 DNS 영역, 프라이빗 DNS 영역 내의 DNS A 레코드를 사용하여 API 서버의 FQDN을 확인할 수 있습니다. AKS 프라이빗 클러스터 및 프라이빗 엔드포인트를 사용하여 API 서버 FQDN을 가상 네트워크 내에서만 확인할 수 있습니다. 프라이빗 클러스터를 사용하면 AKS 프라이빗 클러스터의 가상 네트워크에 액세스할 수 있는 머신에서 브라우저를 실행해야 합니다. 자세한 내용은 Azure Bastion을 호스트하는 서브넷을 참조하세요.
참고
점프 상자의 가용성과 중복성은 매우 중요합니다. 항상 점프 상자에 연결할 수 있어야 합니다. 마찬가지로 항상 프라이빗 AKS 클러스터에 연결할 수 있어야 합니다. 점프 상자의 가용성 및 중복성을 확보하려면 점프 상자를 가용성 집합에 배치하고 적은 수의 VM 인스턴스로 Virtual Machine Scale Sets를 사용합니다. 이러한 응용 프로그램은 Azure AD Graph API를 사용할 수 있습니다. 자세한 내용은 다음 리소스를 참조하세요.
이 아키텍처의 Visio 파일을 다운로드합니다.
데이터 흐름
- 사용자가 Azure Bastion 및 TLS 암호화가 포함된 HTML5 브라우저를 사용하여 점프 상자에 연결하려고 합니다.
- 사용자는 포털에서 RDP 또는 SSH를 사용하여 점프 상자에 연결할지 여부를 선택합니다.
- 사용자는 Azure Bastion을 통해 점프 상자에 로그인합니다. AKS 프라이빗 클러스터에 연결하려는 시도는 이 점프 상자에서 수행됩니다. 허브 가상 네트워크에는 프라이빗 클러스터의 FQDN을 확인하기 위한 AKS 프라이빗 DNS 영역으로의 가상 네트워크 링크가 있습니다.
- 허브 가상 네트워크와 스포크 가상 네트워크는 가상 네트워크 피어링을 사용하여 서로 통신합니다.
- 프라이빗 AKS 클러스터에 도달하기 위해 트래픽이 Azure 백본으로 들어갑니다. 프라이빗 엔드포인트는 프라이빗 AKS 클러스터에 대한 격리된 프라이빗 연결을 설정합니다.
- 트래픽이 프라이빗 AKS 클러스터의 API 서버에 도달합니다. 그런 다음 사용자는 Pod, 노드, 애플리케이션을 관리할 수 있습니다.
참고
퍼블릭 FQDN을 명시적으로 비활성화하지 않으면 프라이빗 클러스터의 FQDN을 가상 네트워크 외부에서 계속 확인할 수 있습니다. AKS 프라이빗 클러스터의 퍼블릭 FQDN을 사용하지 않도록 설정하는 방법에 대한 자세한 내용은 기존 클러스터에서 퍼블릭 FQDN 사용 안 함을 참조하세요.
연결 문제 해결
프라이빗 클러스터에 연결할 수 없는 경우:
가상 네트워크 피어링을 확인합니다. 이 메커니즘은 두 가상 네트워크 간에 네트워크 간 연결을 제공합니다. 두 네트워크 간에 트래픽이 흐르도록 하려면 서로 간에 가상 네트워크 피어링을 설정해야 합니다. 가상 네트워크 피어링을 설정하면 가상 네트워크의 시스템 경로 테이블에 경로가 배치됩니다. 이 경로는 대상 주소 공간에 도달하기 위한 경로를 제공합니다. 가상 네트워크 피어링 문제 해결에 대한 자세한 내용은 가상 네트워크 피어링 만들기, 변경 또는 삭제를 참조하세요.
참고
점프 상자가 프라이빗 엔드포인트 및 AKS 프라이빗 클러스터와 동일한 가상 네트워크에 있는 경우에는 가상 네트워크 피어링이 필요하지 않습니다.
프라이빗 DNS 영역에 대한 가상 네트워크 링크를 확인합니다. 가상 네트워크 링크는 가상 네트워크 내에 있는 VM이 프라이빗 DNS 영역에 연결하고 영역 내의 DNS 레코드를 확인하는 방법을 제공합니다. 프라이빗 AKS 클러스터에 연결할 수 없거나 프라이빗 클러스터의 FQDN을 확인할 수 없는 경우 가상 네트워크에 프라이빗 DNS 영역에 대한 가상 네트워크 링크가 있는지 확인합니다. 프라이빗 DNS 영역의 이름은 다음과 같은 형식이어야 합니다.
privatelink.<region>.azmk8s.io
가상 네트워크 링크 문제 해결에 대한 자세한 내용은 다음 리소스를 참조하세요.
참고
점프 상자가 프라이빗 엔드포인트 및 AKS 프라이빗 클러스터와 동일한 가상 네트워크에 있는 경우에는 가상 네트워크 링크가 필요하지 않습니다. 프라이빗 AKS 클러스터를 만들면 프라이빗 AKS 클러스터를 호스트하는 가상 네트워크에 대한 가상 네트워크 링크를 포함하는 프라이빗 DNS 영역이 만들어집니다.
보안 향상
AKS 워크로드 및 점프 상자를 더욱 안전하게 보호하기 위해 JIT(Just-In-Time) 액세스와 PAW(권한 있는 액세스 워크스테이션)를 사용할 수 있습니다.
클라우드용 Microsoft Defender의 JIT 액세스 기능은 위협 환경을 줄여줍니다. 공격자는 점프 상자에 연결하는 데 사용하는 RDP 및 SSH 포트를 대상으로 하는 경우가 많습니다. JIT 액세스 기능은 네트워크 보안 그룹 또는 Azure Firewall을 사용하여 점프 상자에 대한 모든 인바운드 트래픽을 차단합니다. 사용자가 적절한 RBAC 권한으로 점프 상자에 연결하려고 하면 이 기능은 지정된 시간 동안 선택한 포트에 대한 인바운드 액세스를 허용하도록 네트워크 보안 그룹 또는 Azure Firewall을 구성합니다. 이 시간이 만료되면 포트는 모든 인바운드 트래픽을 거부합니다. JIT 액세스에 대한 자세한 내용은 JIT(Just-In-Time) VM 액세스 이해를 참조하세요.
PAW는 운영자에게 가능한 가장 높은 보안 구성을 제공하는 강화된 물리적 디바이스입니다. 우수한 권한 있는 액세스 전략을 채택하려면 PAW를 사용하여 점프 상자 및 AKS 클러스터에 연결합니다. PAW는 메일 및 웹 검색과 같은 많은 일반적인 공격 벡터를 차단하기 때문에 PAW를 손상시키기는 어렵습니다. PAW에 대한 자세한 내용은 권한 있는 액세스 스토리의 일부로 디바이스 보호를 참조하세요.
VPN 사용
VPN 연결은 온-프레미스 환경에서 Azure로의 하이브리드 연결을 제공합니다. AKS 프라이빗 클러스터에 액세스하려면 내부 가상 네트워크 인프라에 연결해야 합니다. 프라이빗 클러스터의 API 서버는 가상 네트워크 외부에 연결할 수 없습니다.
VPN을 사용하면 프라이빗 AKS 클러스터에 연결할 수 있습니다. VPN 연결을 사용하는 경우 암호화된 터널을 통해 Azure의 가상 네트워크 인프라에 연결할 수 있습니다. 가상 네트워크 게이트웨이에 연결한 후 점프 상자에 도달할 수 있습니다. 여기에서 프라이빗 클러스터의 API 서버에 연결할 수 있습니다.
이 아키텍처의 Visio 파일을 다운로드합니다.
데이터 흐름
- 사용자가 온-프레미스 워크스테이션에서 점프 상자에 대한 RDP 또는 SSH 트래픽을 시작합니다.
- 점프 상자 트래픽은 고객 에지 라우터 및 VPN 어플라이언스를 떠납니다. 트래픽은 암호화된 IPsec 터널을 사용하여 인터넷을 트래버스합니다.
- 점프 상자 트래픽은 Azure 가상 네트워크 인프라의 수신 및 송신 지점인 Azure의 가상 네트워크 게이트웨이에 도달합니다.
- 트래픽이 가상 네트워크 게이트웨이를 통과한 후 점프 상자에 도달합니다. AKS 프라이빗 클러스터에 연결하려는 시도는 점프 상자에서 수행됩니다. 허브 가상 네트워크에는 프라이빗 클러스터의 FQDN을 확인하기 위한 AKS 프라이빗 DNS 영역으로의 가상 네트워크 링크가 있습니다.
- 허브 가상 네트워크와 스포크 가상 네트워크는 가상 네트워크 피어링을 사용하여 서로 통신합니다.
- 프라이빗 AKS 클러스터에 도달하기 위해 트래픽이 Azure 백본으로 들어갑니다. 프라이빗 엔드포인트는 프라이빗 AKS 클러스터에 대한 격리된 프라이빗 연결을 설정합니다.
- 트래픽이 프라이빗 AKS 클러스터의 API 서버에 도달합니다. 그런 다음 사용자는 Pod, 노드, 애플리케이션을 관리할 수 있습니다.
Express 경로 사용
ExpressRoute는 온-프레미스 환경에서 AKS 프라이빗 클러스터에 대한 연결을 설정하는 데 사용할 수 있는 또 다른 옵션입니다. ExpressRoute는 BGP(Border Gateway Protocol)를 사용하여 온-프레미스 네트워크, Azure의 인스턴스, Microsoft 공용 주소 간에 경로를 교환합니다. 이 교환은 Azure 및 온-프레미스 워크스테이션의 IaaS(서비스 제공 인프라) 리소스에 서로의 경로를 제공합니다. ExpressRoute는 엔터프라이즈 환경에 대한 일관된 대역폭과 대기 시간을 유지하면서 격리된 전용 연결을 제공합니다.
이 아키텍처의 Visio 파일을 다운로드합니다.
데이터 흐름
- 사용자가 온-프레미스 워크스테이션에서 점프 상자에 대한 RDP 또는 SSH 트래픽을 시작합니다.
- 점프 상자 트래픽은 고객 에지 라우터를 떠나 파이버 연결을 통해 ExpressRoute 회로가 있는 meet-me 위치로 이동합니다. 트래픽은 MSEE(Microsoft Enterprise Edge) 디바이스에 도달합니다. 그런 다음, Azure 패브릭으로 들어갑니다.
- 점프 상자 트래픽은 Azure 가상 네트워크 인프라의 수신 및 송신 지점인 ExpressRoute 게이트웨이에 도달합니다.
- 트래픽이 점프 상자에 도달합니다. AKS 프라이빗 클러스터에 연결하려는 시도는 점프 상자에서 수행됩니다. 허브 가상 네트워크에는 프라이빗 클러스터의 FQDN을 확인하기 위한 AKS 프라이빗 DNS 영역으로의 가상 네트워크 링크가 있습니다.
- 허브 가상 네트워크와 스포크 가상 네트워크는 가상 네트워크 피어링을 사용하여 서로 통신합니다.
- 프라이빗 AKS 클러스터에 도달하기 위해 트래픽이 Azure 백본으로 들어갑니다. 프라이빗 엔드포인트는 프라이빗 AKS 클러스터에 대한 격리된 프라이빗 연결을 설정합니다.
- 트래픽이 프라이빗 AKS 클러스터의 API 서버에 도달합니다. 그런 다음 사용자는 Pod, 노드, 애플리케이션을 관리할 수 있습니다.
참고
ExpressRoute를 사용하려면 타사 연결 공급자가 MSEE 라우터에 피어링 연결을 제공해야 합니다. ExpressRoute 트래픽이 암호화되지 않았습니다. 자세한 내용은 Azure ExpressRoute란?을 참조하세요.
aks 명령 호출 실행
AKS 프라이빗 클러스터를 사용하면 클러스터의 API 서버에 액세스할 수 있는 VM에서 프라이빗 클러스터에 연결할 수 있습니다. Azure CLI 명령 aks command invoke
를 사용하여 Azure API를 통해 AKS 프라이빗 클러스터에서 kubectl
또는 helm
과 같은 명령을 원격으로 실행할 수 있습니다. aks command invoke
를 사용하면 클러스터 내의 특정 네임스페이스에 일시적인 Pod가 만들어집니다. Pod는 명령의 수명 동안만 유효합니다. 일시적인 Pod를 통해 프라이빗 클러스터에서 명령을 실행할 수 있습니다.
VPN, ExpressRoute, 외부 연결 솔루션 또는 클러스터의 가상 네트워크에 직접 피어링된 가상 네트워크가 없는 경우 프라이빗 클러스터에 연결하는 대체 방법으로 aks command invoke
를 사용할 수 있습니다. aks command invoke
를 사용하기 전에 클러스터 및 노드 풀에 사용할 수 있는 리소스를 확인합니다. 리소스가 부족하면 일시적인 Pod가 만들어지지 않을 수 있습니다.
자세한 내용은 command invoke를 사용하여 프라이빗 AKS(Azure Kubernetes Service) 클러스터에 액세스를 참조하세요.
서브넷에 Cloud Shell 연결
제어하는 가상 네트워크에 Cloud Shell을 배포하면 해당 가상 네트워크 내의 리소스와 상호 작용할 수 있습니다. Cloud Shell 인스턴스는 일반적으로 Microsoft에서 관리하는 가상 네트워크 내에 있는 컨테이너에 배포됩니다. 해당 컨테이너는 다른 가상 네트워크의 리소스와 상호 작용할 수 없습니다. 그러나 AKS 프라이빗 클러스터를 배포하는 경우 Cloud Shell을 클러스터의 API 서버에 연결된 관리하는 서브넷에 연결할 수 있습니다. 그런 다음 프라이빗 클러스터에 연결할 수 있습니다. 자세한 내용은 Azure 가상 네트워크에 Cloud Shell 배포를 참조하세요.
테스트에 SSH 및 Visual Studio Code 사용
SSH는 원격 호스트의 파일을 안전하게 관리하고 액세스하는 방법을 제공하는 프로토콜입니다. 인증 프로세스의 일부로 SSH는 퍼블릭-프라이빗 키 쌍을 사용합니다.
로컬 머신에서 SSH 및 Visual Studio Code Remote - SSH 확장을 사용하여 가상 네트워크에 있는 점프 상자에 연결할 수 있습니다. SSH 터널이 암호화되고 점프 상자에 연결된 공용 IP 주소에서 연결이 종료됩니다. 이 접근 방식을 사용하면 Kubernetes 매니페스트 파일을 쉽게 수정할 수 있습니다.
SSH를 통해 점프 상자에 연결하는 방법을 알아보려면 SSH를 통한 원격 개발을 참조하세요.
프라이빗 클러스터를 관리하기 위해 SSH를 통해 VM에 연결할 수 없는 경우:
- VM 서브넷에 대한 인바운드 네트워크 보안 그룹 규칙을 확인합니다. SSH를 통해 Azure에서 VM에 연결하는 경우 VM 서브넷 또는 NIC에 연결된 네트워크 보안 그룹에는 기본 규칙이 있습니다. 이 규칙은 Azure 외부에서 발생하는 모든 인바운드 인터넷 트래픽을 차단합니다. 이 장애물을 극복하려면 새 인바운드 네트워크 보안 그룹 규칙을 만듭니다. 로컬 머신의 공용 IP 주소에서 발생하는 SSH 트래픽을 허용하도록 새 규칙을 구성합니다.
- 인증서 위치를 확인합니다. SSH를 사용할 때 인증서의 올바른 배치를 확인합니다. 프라이빗 키는 로컬 머신의
C:\Users\User\.ssh\id_rsa
디렉터리에 있어야 합니다. 퍼블릭 키는 Azure의 VM에 있는~/.ssh/id_rsa.pub
파일에 배치해야 합니다.
참고
다음을 수행하는 것이 좋습니다.
- 공용 IP 주소를 사용하여 프로덕션 환경의 리소스에 연결하지 마세요. 개발 및 테스트 시나리오에서만 공용 IP 주소를 사용합니다. 이 섹션의 앞부분에서 설명한 대로 이러한 환경에서 인바운드 네트워크 보안 그룹 규칙을 만들어야 합니다. 이 규칙은 로컬 머신의 공용 IP 주소로 부터 전송된 트래픽이 환경에 들어갈 수 있도록 허용해야 합니다. 네트워크 보안 그룹 규칙에 대한 자세한 내용은 네트워크 보안 그룹 만들기, 변경 또는 삭제를 참조하세요.
- SSH를 사용하여 AKS 노드 또는 컨테이너에 직접 연결하지 않아야 합니다. 즉, 관리 대상 시스템을 관리 도구로 사용하지 마세요. 이 접근 방식은 신뢰할 수 없습니다. 클러스터 외부에 있는 전용 솔루션을 사용하는 것이 좋습니다. 이 명령을 사용하면 프록시 액세스를 위해 클러스터 내에 일시적인 Pod가 만들어지므로
aks command invoke
가 배포에 적합한지 여부를 평가할 때 이 점을 염두에 두어야 합니다.
결론
- 공용 FQDN을 사용하지 않도록 설정하지 않은 경우 인터넷을 통해 AKS 클러스터의 API 서버에 액세스할 수 있습니다.
- Cloud Shell은 AKS 클러스터에 연결하는 데 사용할 수 있는 Azure 포털의 기본 제공 명령줄 셸입니다.
- 프라이빗 클러스터에 액세스하는 보다 안전한 방법 및 잠긴 방법을 보려면 Azure Bastion 및 프라이빗 엔드포인트를 사용합니다.
- VPN과 ExpressRoute는 모두 프라이빗 AKS 클러스터에 대한 하이브리드 연결을 용이하게 하는 데 도움이 됩니다.
- 외부 연결 솔루션이 없는 경우 원격으로
aks command invoke
를 실행하여 AKS 프라이빗 클러스터에 연결할 수 있습니다. - 관리하는 가상 네트워크에 직접 Cloud Shell을 배포할 수 있습니다. Cloud Shell은 관리하는 가상 네트워크에서 프라이빗 클러스터에 액세스할 수 있습니다.
- Visual Studio Code 및 SSH를 사용하여 점프 상자에 연결할 수 있습니다. 이 접근 방식은 점프 상자에 대한 연결을 암호화하고, VM 내에서 프라이빗 클러스터에 액세스할 수 있도록 하며, 개발 시나리오에서 매니페스트 파일을 쉽게 수정할 수 있도록 합니다. 그러나 이러한 연결 방법은 사용자 환경에서 공용 IP 주소를 노출시킵니다.
참가자
Microsoft에서 이 문서를 유지 관리합니다. 원래 다음 기여자가 작성했습니다.
주요 작성자:
- Ayobami Ayodeji | 프로그램 관리자 2
- Ariel Ramirez | 컨설턴트
- Bahram Rushenas | 인큐베이션 설계자
기타 기여자:
- Shubham Agnihotri | 컨설턴트
비공개 LinkedIn 프로필을 보려면 LinkedIn에 로그인합니다.