AKS 클러스터에서 아웃바운드 연결의 기본 문제 해결
이 문서에서는 AKS(Microsoft Azure Kubernetes Service) 클러스터에서 아웃바운드 연결의 기본 문제 해결을 수행하고 결함이 있는 구성 요소를 식별하는 방법을 설명합니다.
필수 조건
Kubernetes kubectl 도구 또는 클러스터에 연결할 유사한 도구입니다. Azure CLI를 사용하여 kubectl을 설치하려면 az aks install-cli 명령을 실행합니다.
패키지를 처리하기 위한 apt-get 명령줄 도구입니다.
클라이언트 URL(cURL) 도구 또는 유사한 명령줄 도구입니다.
nslookup
DNS 확인을 확인하기 위한 명령줄(dnsutils) 도구입니다.
Azure Kubernetes Service의 아웃바운드 트래픽 시나리오
Pod 또는 작업자 노드에서 온 AKS 클러스터 내에서 발생하는 트래픽은 클러스터의 아웃바운드 트래픽으로 간주됩니다. AKS 클러스터의 아웃바운드 흐름에 문제가 있는 경우 어떻게 해야 할까요? 문제를 해결하기 전에 먼저 아웃바운드 트래픽 흐름에 대한 시나리오를 살펴보세요.
AKS 클러스터의 아웃바운드 트래픽은 다음 범주로 분류할 수 있습니다.
동일한 가상 네트워크 또는 가상 네트워크 피어링을 사용하는 다른 가상 네트워크의 디바이스 또는 엔드포인트에 대한 트래픽입니다.
VPN 연결 또는 Azure ExpressRoute 연결을 통해 온-프레미스 환경으로의 트래픽
Azure Load Balancer(퍼블릭 아웃바운드 트래픽)를 통해 AKS 네트워크 외부의 트래픽
Azure Firewall 또는 프록시 서버(퍼블릭 아웃바운드 트래픽)를 통해 AKS 네트워크 외부의 트래픽
내부 트래픽
AKS 클러스터의 내부 트래픽에 대한 기본 요청 흐름은 다음 다이어그램에 표시된 흐름과 유사합니다.
Azure Load Balancer를 통한 퍼블릭 아웃바운드 트래픽
트래픽이 인터넷의 대상에 대한 경우 기본 방법은 Azure Load Balancer를 통해 트래픽을 보내는 것입니다.
Azure Firewall 또는 프록시 서버를 통한 퍼블릭 아웃바운드 트래픽
경우에 따라 송신 트래픽을 필터링해야 하며 Azure Firewall이 필요할 수 있습니다.
사용자는 방화벽 대신 프록시 서버를 추가하거나 송신 트래픽에 대한 NAT 게이트웨이를 설정할 수 있습니다. 기본 흐름은 다이어그램에 표시된 것과 동일하게 유지합니다.
문제 해결을 계속할 수 있도록 클러스터에 대한 송신 흐름의 특성을 이해하는 것이 중요합니다.
문제 해결 시 고려 사항
송신 디바이스 확인
AKS에서 아웃바운드 트래픽 문제를 해결할 때 송신 디바이스(트래픽이 통과하는 디바이스)가 무엇인지 아는 것이 중요합니다. 여기서 송신 디바이스는 다음 구성 요소 중 하나일 수 있습니다.
- Azure Load Balancer
- Azure Firewall 또는 사용자 지정 방화벽
- NAT(네트워크 주소 변환) 게이트웨이
- 프록시 서버
흐름은 대상에 따라 다를 수도 있습니다. 예를 들어 내부 트래픽(즉, 클러스터 내)은 송신 디바이스를 통과하지 않습니다. 내부 트래픽은 클러스터 네트워킹만 사용합니다. 공용 아웃바운드 트래픽의 경우 송신 디바이스가 통과하는지 확인하고 해당 디바이스를 확인합니다.
트래픽 흐름 내의 각 홉 확인
송신 디바이스를 식별한 후 다음 요소를 확인합니다.
요청의 원본 및 대상입니다.
원본과 대상 간의 홉입니다.
요청-응답 흐름입니다.
다음 계층과 같은 추가 보안 계층에 의해 향상된 홉입니다.
- 방화벽
- NSG(네트워크 보안 그룹) 이름
- 네트워크 정책
문제가 있는 홉을 식별하려면 응답 코드 전후에 응답 코드를 확인합니다. 패킷이 특정 홉에 제대로 도착하는지 확인하려면 패킷 캡처를 계속 진행할 수 있습니다.
HTTP 응답 코드 확인
각 구성 요소를 확인할 때 HTTP 응답 코드를 가져오고 분석합니다. 이러한 코드는 문제의 특성을 식별하는 데 유용합니다. 이 코드는 애플리케이션이 HTTP 요청에 응답하는 시나리오에서 특히 유용합니다.
클라이언트 및 서버에서 패킷 캡처 수행
다른 문제 해결 단계에서 결정적인 결과를 제공하지 않는 경우 클라이언트 및 서버에서 패킷 캡처를 수행합니다. 패킷 캡처는 클라이언트와 서버 간에 HTTP가 아닌 트래픽이 관련된 경우에도 유용합니다. AKS 환경에 대한 패킷 캡처를 수집하는 방법에 대한 자세한 내용은 데이터 수집 가이드의 다음 문서를 참조하세요.
검사 목록 문제 해결
AKS 클러스터의 송신 트래픽에 대한 기본 문제 해결은 다음 단계를 수행합니다.
IP 주소를 통해 엔드포인트에 연결할 수 있는지 확인하세요.
다른 원본에서 엔드포인트에 연결할 수 있는지 확인합니다.
방화벽 또는 프록시가 트래픽을 차단하고 있는지 확인하세요.
AKS 서비스 주체 또는 관리된 ID가 Azure 리소스에 대한 네트워크를 변경하는 데 필요한 AKS 서비스 권한이 있는지 확인하세요.
참고 항목
기본 문제 해결을 수행할 때 서비스 메시가 없다고 가정합니다. Istio와 같은 서비스 메시를 사용하는 경우 TCP 기반 트래픽에 대해 비정상적인 결과가 생성됩니다.
Pod 및 노드가 엔드포인트에 도달할 수 있는지 확인
Pod 내에서 엔드포인트에 대한 DNS 조회를 실행할 수 있습니다.
kubectl exec 명령을 실행하여 Pod에 연결하고 DNS Utils 패키지를 설치할 수 없는 경우 어떻게 해야 하나요? 이런 상황에서는 문제가 있는 Pod와 동일한 네임스페이스에서 테스트 Pod를 시작한 다음 테스트를 실행할 수 있습니다.
참고 항목
DNS 확인이나 송신 트래픽으로 인해 필요한 네트워크 패키지를 설치할 수 없는 경우 rishasi/ubuntu-netutil:1.0
Docker 이미지를 사용할 수 있습니다. 이 이미지에서는 필요한 패키지가 이미 설치되어 있습니다.
Linux Pod의 DNS 확인을 확인하는 예제 절차
문제가 있는 Pod와 같은 네임스페이스에서 테스트 Pod를 시작합니다.
kubectl run -it --rm aks-ssh --namespace <namespace> --image=debian:stable --overrides='{"spec": { "nodeSelector": {"kubernetes.io/os": "linux"}}}'
테스트 Pod가 실행되면 Pod에 액세스할 수 있습니다.
다른 도구 패키지를 설치하려면 다음
apt-get
명령을 실행합니다.# Update and install tool packages apt-get update && apt-get install -y dnsutils curl
패키지가 설치된 후 nslookup 명령을 실행하여 엔드포인트에 대한 DNS 확인을 테스트합니다.
$ nslookup microsoft.com # Microsoft.com is used as an example Server: <server> Address: <server IP address>#53 ... ... Name: microsoft.com Address: 20.53.203.50
업스트림 DNS 서버에서 직접 DNS 확인을 시도합니다. 이 예에서는 Azure DNS를 사용합니다.
$ nslookup microsoft.com 168.63.129.16 Server: 168.63.129.16 Address: 168.63.129.16#53 ... ... Address: 20.81.111.85
경우에 따라 클러스터 DNS가 아닌 엔드포인트 자체에 문제가 있습니다. 이러한 경우 다음 검사를 고려합니다.
원하는 포트가 원격 호스트에서 열려 있는지 확인합니다.
curl -Ivm5 telnet://microsoft.com:443
HTTP 응답 코드를 확인합니다.
curl -Ivm5 https://microsoft.com
다른 엔드포인트에 연결할 수 있는지 확인합니다.
curl -Ivm5 https://kubernetes.io
문제가 있는 Pod가 있는 노드에서 엔드포인트에 연결할 수 있는지 확인한 다음 DNS 설정을 확인하려면 다음 단계를 수행합니다.
디버그 Pod를 통해 문제가 있는 Pod가 있는 노드를 입력합니다. 이 작업을 수행하는 방법에 대한 자세한 내용은 유지 관리 또는 문제 해결을 위해 AKS(Azure Kubernetes Service) 클러스터 노드에 연결을 참조 하세요.
엔드포인트에 대한 DNS 확인을 테스트합니다.
$ nslookup microsoft.com Server: 168.63.129.16 Address: 168.63.129.16#53 Non-authoritative answer: Name: microsoft.com Address: 20.112.52.29 Name: microsoft.com Address: 20.81.111.85 Name: microsoft.com Address: 20.84.181.62 Name: microsoft.com Address: 20.103.85.33 Name: microsoft.com Address: 20.53.203.50
resolv.conf 파일을 확인하여 예상 이름 서버가 추가되는지 여부를 확인합니다.
cat /etc/resolv.conf cat /run/systemd/resolve/resolv.conf
Windows Pod의 DNS 확인을 확인하는 예제 절차
Windows 노드 풀에서 테스트 Pod를 실행합니다.
# For a Windows environment, use the Resolve-DnsName cmdlet. kubectl run dnsutil-win --image='mcr.microsoft.com/windows/servercore:ltsc2022' --overrides='{"spec": { "nodeSelector": {"kubernetes.io/os": "windows"}}}' -- powershell "Start-Sleep -s 3600"
PowerShell을 사용하여 kubectl exec 명령을 실행하여 Pod에 연결합니다.
kubectl exec -it dnsutil-win -- powershell
PowerShell에서 Resolve-DnsName cmdlet을 실행하여 엔드포인트에 대한 DNS 확인이 작동하는지 확인합니다.
PS C:\> Resolve-DnsName www.microsoft.com Name Type TTL Section NameHost ---- ---- --- ------- -------- www.microsoft.com CNAME 20 Answer www.microsoft.com-c-3.edgekey.net www.microsoft.com-c-3.edgekey. CNAME 20 Answer www.microsoft.com-c-3.edgekey.net.globalredir.akadns.net net www.microsoft.com-c-3.edgekey. CNAME 20 Answer e13678.dscb.akamaiedge.net net.globalredir.akadns.net Name : e13678.dscb.akamaiedge.net QueryType : AAAA TTL : 20 Section : Answer IP6Address : 2600:1408:c400:484::356e Name : e13678.dscb.akamaiedge.net QueryType : AAAA TTL : 20 Section : Answer IP6Address : 2600:1408:c400:496::356e Name : e13678.dscb.akamaiedge.net QueryType : A TTL : 12 Section : Answer IP4Address : 23.200.197.152
DNS 확인과 관련된 한 가지 특이한 시나리오에서 DNS 쿼리는 노드에서 올바른 응답을 받지만 Pod에서 실패합니다. 이 시나리오에서는 작업자 노드가 아닌 Pod 내부에서 DNS 확인 실패를 확인하는 것이 좋습니다. 클러스터 전체의 엔드포인트에 대한 DNS 확인을 검사하려는 경우 클러스터 전체에서 DNS 확인 상태를 확인하는 것이 좋습니다.
DNS 확인에 성공하면 네트워크 테스트를 계속합니다. 그렇지 않으면 클러스터에 대한 DNS 구성을 확인합니다.
타사 연락처 고지
이 문서에 포함된 타사의 연락처 정보는 이 항목에 대한 추가 정보를 찾는 데 도움을 주기 위한 것입니다. 이 연락처 정보는 공지 없이 변경될 수 있습니다. Microsoft는 타사 연락처 정보의 정확성을 보증하지 않습니다.
도움을 요청하십시오.
질문이 있거나 도움이 필요한 경우 지원 요청을 생성하거나Azure 커뮤니티 지원에 문의하세요. Azure 피드백 커뮤니티에 제품 피드백을 제출할 수도 있습니다.