포드가 Amazon EKS의 다른 포드에 연결되지 않는 이유는 무엇인가요?

5분 분량
0

포드가 Amazon Elastic Kubernetes Service(Amazon EKS)의 다른 포드에 연결되지 않습니다.

간략한 설명

**참고:**AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류가 발생하는 경우 최신 AWS CLI 버전을 사용하고 있는지 확인하세요.

포드를 다른 포드와 연결할 수 없는 경우, 애플리케이션에 따라 다음 오류가 발생할 수 있습니다.

워커 노드의 보안 그룹이 노드 간 통신을 허용하지 않는 경우, 다음 오류가 표시됩니다.

curl: (7) Failed to connect to XXX.XXX.XX.XXX port XX: Connection timed out

DNS가 작동하지 않으면 다음 오류가 표시됩니다.

curl nginx  
curl: (6) Could not resolve host: nginx

DNS가 작동 중이지만 포드 연결 문제가 있는 경우 다음 오류가 표시됩니다.

Error: RequestError: send request failed caused by: Post  dial tcp 1.2.3.4.5:443: i/o timeout

서비스를 통해 노출되지 않은 포드의 DNS를 확인하려고 하면 다음 오류가 표시됩니다.

kubectl exec -it busybox -- nslookup nginx
Server:   10.100.0.10
Address:  10.100.0.10:53
** server can't find nginx.default.svc.cluster.local: NXDOMAIN
*** Can't find nginx.svc.cluster.local: No answer
*** Can't find nginx.cluster.local: No answer
*** Can't find nginx.ap-southeast-2.compute.internal: No answer
*** Can't find nginx.default.svc.cluster.local: No answer
*** Can't find nginx.svc.cluster.local: No answer
*** Can't find nginx.cluster.local: No answer
*** Can't find nginx.ap-southeast-2.compute.internal: No answer

이러한 오류를 해결하려면 환경이 올바르게 설정되어 있는지 확인하세요.

  • 보안 그룹이 Amazon EKS 가이드라인을 충족합니다.
  • 네트워크 액세스 제어 목록(네트워크 ACL)이 연결을 거부하지 않습니다.
  • 서브넷에 Amazon Virtual Private Cloud(VPC) 내에서 통신하기 위한 로컬 경로가 있습니다.
  • 서브넷에 사용 가능한 IP 주소가 충분합니다.
  • 포드의 보안 그룹은 포드가 서로 통신할 수 있도록 허용합니다.
  • 워커 노드에 IP 포워딩이 켜져 있습니다.
  • Kubernetes에 대한 네트워킹 요구 사항을 충족합니다(의도적인 NetworkPolicy 제외).
  • 포드가 DNS를 올바르게 사용하여 서로 통신하고 있습니다.
  • 포드가 예약되어 있고 RUNNING 상태입니다.
  • 권장 버전의 Kubernetes용 Amazon VPC Container Network Interface(CNI) 플러그인이 있습니다.

해결 방법

보안 그룹이 Amazon EKS 지침을 충족합니다.

워커 노드의 보안 그룹에서 허용하는 트래픽을 제한하려면 인바운드 규칙을 생성합니다. 워커 노드가 노드 간 통신에 사용하는 모든 프로토콜 또는 포트에 대해 이러한 규칙을 생성합니다.

워커 노드의 보안 그룹에 대해 모든 트래픽을 허용하는 것이 가장 좋습니다. 새 포트가 있는 새 포드가 생성될 때마다 보안 그룹 규칙을 변경할 필요는 없습니다.

자세한 내용은 Amazon EKS 보안 그룹 요구 사항 및 고려 사항을 참조하세요.

네트워크 ACL이 연결을 거부하지 않습니다.

1.    Amazon EKS 클러스터와 VPC CIDR 간의 트래픽 흐름이 네트워크 ACL에서 원활한지 확인합니다.

  1. (선택 사항) VPC에 추가 보안 계층을 추가하려면 보안 그룹과 유사한 규칙으로 네트워크 ACL을 설정하는 것을 고려합니다.

서브넷에 VPC 내 통신을 위한 로컬 경로가 있습니다.

서브넷에 VPC 내 통신을 위한 기본 경로가 있는지 확인합니다.

서브넷에 사용 가능한 IP 주소가 충분히 있습니다.

지정된 서브넷에 계정 간 탄력적 네트워크 인터페이스와 포드에 사용할 수 있는 충분한 IP 주소가 있는지 확인하세요.

자세한 내용은 Amazon EKS VPC 및 서브넷 요구 사항과 고려 사항을 참조하세요.

사용 가능한 IP 주소를 확인하려면 다음 AWS CLI 명령을 실행합니다.

$ aws ec2 describe-subnets --subnet-id YOUR-SUBNET-ID --query 'Subnets[0].AvailableIpAddressCount'

포드에 대한 보안 그룹이 포드가 서로 통신할 수 있도록 허용합니다.

포드에 대한 보안 그룹 또는 CNI 사용자 지정 네트워킹을 사용하는 경우, 모든 보안 그룹을 포드에 할당할 수 있다. 이 시나리오에서는 보안 그룹이 포드 간 통신을 올바르게 허용하는지 확인합니다.

워커 노드에 IP 포워딩이 켜져 있습니다.

사용자 지정 AMI를 사용하는 경우, net.ipv4.ip_forward 커널 변수가 켜져 있는지 확인해야 합니다. 워커 노드에서 이 설정을 확인하려면 다음 명령 중 하나를 실행합니다.

# sysctl net.ipv4.ip_forward

# cat /proc/sys/net/ipv4/ip_forward

출력이 0이면 다음 명령 중 하나를 사용하여 net.ipv4.ip_forward 커널 변수를 활성화합니다.

# sysctl -w net.ipv4.ip_forward=1

# echo 1 > /proc/sys/net/ipv4/ip_forward

컨테이너 런타임의 Amazon EKS AMI의 경우, 설정 활성화에 대한 install-worker.sh 스크립트의 184~188줄을 GitHub에서 참조하세요. 컨테이너는 Amazon EKS 버전 1.24 이상에서 기본 런타임이므로, 이 단계는 포드 간 네트워크 연결 문제를 해결하는 데 필요합니다.

Kubernetes에 대한 네트워킹 요구 사항에 부합합니다(의도적인 NetworkPolicy 제외).

Kubernetes 네트워킹 요구 사항을 충족하는지 확인합니다(Kubernetes 웹사이트에서 참조).

기본적으로 포드는 격리되지 않습니다. 포드는 모든 소스로부터의 트래픽을 허용합니다. 포드는 포드를 선택하는 NetworkPolicy를 통해 격리됩니다.

참고: NetworkPolicy 구성에 대해서는 Calico 네트워크 정책 엔진 추가 기능 설치를 참조하세요.

포드가 DNS를 올바르게 사용하여 서로 통신하고 있습니다.

먼저 서비스를 통해 포드를 노출해야 합니다. 그렇지 않으면 포드는 DNS 이름을 받을 수 없으며 해당 포드의 특정 IP 주소로만 접근할 수 있습니다.

다음 예제 출력은 nginx 서비스의 DNS 이름을 확인하려는 시도를 보여줍니다. 이 경우, ClusterIP 10.100.94.70이 반환됩니다.

$ kubectl run nginx --image=nginx --replicas=5 -n web
deployment.apps/nginx created

$ kubectl expose deployment nginx --port=80 -n web
service/nginx exposed

$ kubectl get svc -n web
NAME    TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE
nginx   ClusterIP   10.100.94.70   <none>        80/TCP    2s

# kubectl exec -ti busybox -n web -- nslookup nginx
Server:    10.100.0.10
Address 1: 10.100.0.10 ip-10-100-0-10.ap-southeast-2.compute.internal
Name:      nginx
Address 1: 10.100.94.70 ip-10-100-94-70.ap-southeast-2.compute.internal

포드가 여전히 DNS를 확인하지 못할 경우 Amazon EKS와 관련된 DNS 오류를 해결하려면 어떻게 해야 합니까?를 참조하세요.

참고: 자세한 내용은 Kubernetes 웹사이트에서 포드, 서비스헤드리스 서비스를 참조하세요.

포드가 예약되어 있고 RUNNING 상태입니다.

포드가 예약되어 있고 RUNNING 상태인지 확인합니다.

포드 상태에 관한 문제를 해결하려면 Amazon EKS에서 포드 상태 문제를 해결하려면 어떻게 해야 하나요?를 참조하세요.

Kubernetes용 Amazon VPC CNI 플러그인의 권장 버전이 있습니다.

](https://docs.aws.amazon.com/eks/latest/userguide/managing-vpc-cni.html)Kubernetes용 Amazon VPC CNI 플러그인[의 권장 버전이 없는 경우 최신 버전으로 업그레이드하세요.

권장 버전이 있지만 문제가 있는 경우 Amazon EKS에 대한 kubelet 또는 CNI 플러그인 문제를 해결하려면 어떻게 해야 하나요?를 참조하세요.

AWS 공식
AWS 공식업데이트됨 일 년 전
댓글 없음