Azure Arc 사용 Kubernetes 클러스터에 대한 연결 문제 진단
클러스터를 Azure Arc에 연결하는 데 문제가 있는 경우 여기에 나와 있는 문제 중 하나 때문일 수 있습니다. 두 가지 순서도에 단계별 도움말이 제공됩니다. 하나는 프록시 서버를 사용하지 않는 경우이고 다른 하나는 네트워크 연결에서 프록시 서버를 사용하는 경우 적용됩니다.
팁
이 순서도의 단계는 Azure CLI 또는 Azure PowerShell을 사용하여 클러스터를 연결하는지 여부에 관계없이 적용됩니다. 그러나 일부 단계에서는 Azure CLI를 사용해야 합니다. 아직 Azure CLI를 설치하지 않은 경우 시작하기 전에 설치해야 합니다.
프록시 없이 연결
프록시 서버 없이 클러스터를 Azure Arc에 연결하려고 할 때 문제를 진단하려면 이 순서도를 검토합니다. 각 항목에 대한 자세한 내용은 아래에서 설명합니다.
Azure ID에 충분한 권한이 있나요?
클러스터를 연결하기 위한 필수 구성 요소를 검토하고 클러스터를 연결하는 데 사용하는 ID에 필요한 권한이 있는지 확인합니다.
최신 버전의 Azure CLI를 실행하고 있나요?
설치된 최신 버전이 있는지 확인하세요.
Azure PowerShell을 사용하여 클러스터를 연결한 경우 최신 버전을 실행하고 있는지 확인합니다.
최신 확장 버전이 connectedk8s
인가요?
다음 명령을 실행하여 Azure CLI connectedk8s
확장을 최신 버전으로 업데이트합니다.
az extension update --name connectedk8s
확장을 아직 설치하지 않은 경우 다음 명령을 실행하여 확장을 설치할 수 있습니다.
az extension add --name connectedk8s
kubeconfig가 올바른 클러스터를 가리키고 있나요?
kubectl config get-contexts
를 실행하여 대상 컨텍스트 이름을 확인합니다. 그런 다음, kubectl config use-context <target-cluster-name>
를 실행하여 기본 컨텍스트를 올바른 클러스터로 설정합니다.
모든 필수 리소스 공급자가 등록되어 있나요?
Microsoft.Kubernetes, Microsoft.KubernetesConfiguration, and Microsoft.ExtendedLocation 리소스 공급자가 등록되어 있는지 확인합니다.
모든 네트워크 요구 사항을 충족하나요?
네트워크 요구 사항을 검토하고 필요한 엔드포인트가 차단되지 않았는지 확인합니다.
azure-arc
네임스페이스의 모든 Pod가 실행되고 있나요?
모든 것이 올바르게 작동하는 경우 Pod는 모두 Running
상태에 있어야 합니다. kubectl get pods -n azure-arc
를 실행하여 Pod의 상태가 Running
이 아닌지 확인합니다.
여전히 문제가 있나요?
위의 단계에서는 많은 일반적인 연결 문제를 해결하지만 여전히 연결할 수 없는 경우 문제 해결 로그 파일을 생성한 다음, 지원 요청을 열어 문제를 추가로 조사할 수 있습니다.
문제 해결 로그 파일을 생성하려면 다음 명령을 실행합니다.
az connectedk8s troubleshoot -g <myResourceGroup> -n <myK8sCluster>
지원 요청을 만들 때 추가 세부 정보 섹션에서 파일 업로드 옵션을 사용하여 생성된 로그 파일을 업로드합니다.
프록시 서버와 연결
하나 이상의 컴퓨터에서 프록시 서버를 사용하는 경우 기본 문제 해결 단계를 위해 비 프록시 순서도의 처음 5단계(리소스 공급자 등록을 통해)를 완료합니다. 그런 다음, 여전히 문제가 발생하는 경우 다음 순서도에서 추가 문제 해결 단계를 검토합니다. 각 항목에 대한 자세한 내용은 아래에서 설명합니다.
컴퓨터가 프록시 서버를 통해 명령을 실행하고 있나요?
컴퓨터가 프록시 서버 뒤에서 명령을 실행하는 경우 필요한 모든 환경 변수를 설정해야 합니다. 자세한 내용은 아웃바운드 프록시 서버를 사용하여 연결을 참조하세요.
예시:
export HTTP_PROXY="http://<proxyIP>:<proxyPort>"
export HTTPS_PROXY="https://<proxyIP>:<proxyPort>"
export NO_PROXY="<cluster-apiserver-ip-address>:<proxyPort>"
프록시 서버가 신뢰할 수 있는 인증서만 허용하나요?
az connectedk8s connect
명령을 실행할 때 --proxy-cert <path-to-cert-file>
를 포함하여 인증서 파일 경로를 포함해야 합니다.
az connectedk8s connect --name <cluster-name> --resource-group <resource-group> --proxy-cert <path-to-cert-file>
프록시 서버가 필요한 네트워크 엔드포인트에 연결할 수 있나요?
네트워크 요구 사항을 검토하고 필요한 엔드포인트가 차단되지 않았는지 확인합니다.
프록시 서버가 HTTP만 사용하나요?
프록시 서버에서 HTTP만 사용하는 경우 두 매개 변수 모두에 proxy-http
를 사용할 수 있습니다.
프록시 서버가 HTTP 및 HTTPS 둘 다로 설정된 경우 지정된 --proxy-https
및 --proxy-http
매개 변수를 사용하여 az connectedk8s connect
명령을 실행합니다. --proxy-http
(HTTP 프록시의 경우) 및 --proxy-https
(HTTPS 프록시의 경우)를 사용하고 있는지 확인합니다.
az connectedk8s connect --name <cluster-name> --resource-group <resource-group> --proxy-https https://<proxy-server-ip-address>:<port> --proxy-http http://<proxy-server-ip-address>:<port>
프록시 서버에 서비스 간 통신을 위해 건너뛰기 범위가 필요한가요?
건너뛰기 범위가 필요한 경우 az connectedk8s connect
명령에서 --proxy-skip-range <excludedIP>,<excludedCIDR>
를 사용합니다.
az connectedk8s connect --name <cluster-name> --resource-group <resource-group> --proxy-https https://<proxy-server-ip-address>:<port> --proxy-http http://<proxy-server-ip-address>:<port> --proxy-skip-range <excludedIP>,<excludedCIDR>
azure-arc
네임스페이스의 모든 Pod가 실행되고 있나요?
모든 것이 올바르게 작동하는 경우 Pod는 모두 Running
상태에 있어야 합니다. kubectl get pods -n azure-arc
를 실행하여 Pod의 상태가 Running
이 아닌지 확인합니다.
엔드포인트에 대한 DNS 확인이 성공했는지 확인
Pod 내에서 엔드포인트에 대한 DNS 조회를 실행할 수 있습니다.
kubectl exec 명령을 실행하여 Pod에 연결하고 DNS Utils 패키지를 설치할 수 없는 경우 어떻게 해야 하나요? 이런 상황에서는 문제가 있는 Pod와 동일한 네임스페이스에서 테스트 Pod를 시작한 다음 테스트를 실행할 수 있습니다.
참고 항목
DNS 확인이나 송신 트래픽으로 인해 필요한 네트워크 패키지를 설치할 수 없는 경우 rishasi/ubuntu-netutil:1.0
Docker 이미지를 사용할 수 있습니다. 이 이미지에서는 필요한 패키지가 이미 설치되어 있습니다.
DNS 확인을 위한 절차 예는 다음과 같습니다.
문제가 있는 Pod와 같은 네임스페이스에서 테스트 Pod를 시작합니다.
kubectl run -it --rm test-pod --namespace <namespace> --image=debian:stable
테스트 Pod가 실행되면 Pod에 액세스할 수 있습니다.
다른 도구 패키지를 설치하려면 다음
apt-get
명령을 실행합니다.apt-get update -y apt-get install dnsutils -y apt-get install curl -y apt-get install netcat -y
패키지가 설치된 후 nslookup 명령을 실행하여 엔드포인트에 대한 DNS 확인을 테스트합니다.
$ nslookup microsoft.com Server: 10.0.0.10 Address: 10.0.0.10#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
host
명령을 실행하여 DNS 요청이 업스트림 서버로 라우팅되는지 확인합니다.$ host -a microsoft.com Trying "microsoft.com.default.svc.cluster.local" Trying "microsoft.com.svc.cluster.local" Trying "microsoft.com.cluster.local" Trying "microsoft.com.00idcnmrrm4edot5s2or1onxsc.bx.internal.cloudapp.net" Trying "microsoft.com" Trying "microsoft.com" ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 62884 ;; flags: qr rd ra; QUERY: 1, ANSWER: 27, AUTHORITY: 0, ADDITIONAL: 5 ;; QUESTION SECTION: ;microsoft.com. IN ANY ;; ANSWER SECTION: microsoft.com. 30 IN NS ns1-39.azure-dns.com. ... ... ns4-39.azure-dns.info. 30 IN A 13.107.206.39 Received 2121 bytes from 10.0.0.10#53 in 232 ms
Windows 노드 풀에서 테스트 Pod를 실행합니다.
# For a Windows environment, use the Resolve-DnsName cmdlet. kubectl run dnsutil-win --image='mcr.microsoft.com/windows/servercore:1809' --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 구성을 확인합니다.
여전히 문제가 있나요?
위의 단계에서는 많은 일반적인 연결 문제를 해결하지만 여전히 연결할 수 없는 경우 문제 해결 로그 파일을 생성한 다음, 지원 요청을 열어 문제를 추가로 조사할 수 있습니다.
문제 해결 로그 파일을 생성하려면 다음 명령을 실행합니다.
az connectedk8s troubleshoot -g <myResourceGroup> -n <myK8sCluster>
지원 요청을 만들 때 추가 세부 정보 섹션에서 파일 업로드 옵션을 사용하여 생성된 로그 파일을 업로드합니다.
다음 단계
- 자세한 내용은 Azure Arc 사용 Kubernetes 사용을 위한 문제 해결 팁을 확인합니다.
- 기존 Kubernetes 클러스터를 Azure Arc에 연결하는 프로세스를 검토합니다.