서비스에 접근하기
Last updated
Was this helpful?
Last updated
Was this helpful?
Kubernetes는 서비스를 찾는 두개의 기본 모드를 지원합니다:
environment variables
DNS
전자는 기본적으로 작동 하지만 후자는 클러스터 추가 기능(EKS 클러스터 생성시 자동으로 설치됨)이 필요 합니다.
Pod가 노드에서 실행될 때 kubelet
은 각 활성 서비스에 대한 환경 변수 세트를 추가 합니다. 이로 인해 순서상의 문제가 발생합니다. 이유를 확인 하려면 실행중인 nginx 포드의 환경을 검사합니다 (포드 이름은 다를 수 있습니다).
이제 실행중인 nginx 파드 중 하나의 환경을 살펴보겠습니다.
서비스에 대한 언급이 없습니다. 이는 서비스 이전에 복제본을 생성했기 때문입니다.
이 작업의 또 다른 단점은 스케줄러가 두 파드를 동일한 머신에 배치 할 수 있다는 것입니다. 이로 인해 서비스가 종료되면 전체 서비스가 중단 됩니다. 2개의 파드를 종료하고 Deployment가 다시 생성 할 때까지 기다리면 올바른 방법으로 서비스를 제대로 수행 할 수 있습니다. 이번에는 서비스 주변에 복제본이 존재합니다. 이렇게 하면 파드(모든 노드의 용량이 동일한 경우)에 퍼져있는 스케줄러 수준 서비스와 올바른 환경 변수가 제공됩니다.
변경되는 순간의 출력은 다음과 같습니다.
파드가 파괴되고 다시 생성되기 때문에 파드의 이름이 다른 것을 알 수 있습니다. 이제 실행중인 nginx 파드 중 하나의 환경을 한 번 더 살펴 보겠습니다:
이제 MY_NGINX_SERVICE_HOST
라는 nginx 서비스 IP를 참조하는 환경 변수가 있습니다.
쿠버네티스는 DNS 이름을 다른 서비스에 자동으로 할당하는 DNS 클러스터 추가 서비스를 제공 합니다. 클러스터가 이미 CoreDNS를 실행하고 있는지 확인하려면 다음 명령을 사용하십시오.
본 실습의 나머지 부분에서는 IP(my-nginx)가 있는 서비스와 해당 IP에 이름을 할당한 DNS 서버 (CoreDNS 클러스터 추가 기능)가 있다고 가정 하므로 서비스와 통신 할 수 있습니다. 표준 방법 (예 : gethostbyname)을 사용하여 클러스터의 모든 파드에서 이를 테스트하기 위해 다른 curl 애플리케이션을 실행 해 보겠습니다.
아래 명려어를 입력하여 실행합니다.
다음과 같은 결과가 나옵니다.
exit을 입력하고 컨테이너를 빠져 나옵니다.