Red Hat Training

A Red Hat training course is available for OpenShift Container Platform

39.5. 서비스 디버깅

클러스터 내부에서 서비스와 통신할 수 없는 경우(서비스가 직접 통신할 수 없거나 라우터를 사용하고 클러스터로 전환해야 하기 때문에) 서비스와 연결된 엔드포인트를 작업하고 디버깅해야 합니다.

먼저 서비스를 받습니다.

# oc get services --all-namespaces
NAMESPACE   NAME              LABELS                                    SELECTOR                  IP(S)            PORT(S)
default     docker-registry   docker-registry=default                   docker-registry=default   172.30.243.225   5000/TCP
default     kubernetes        component=apiserver,provider=kubernetes   <none>                    172.30.0.1       443/TCP
default     router            router=router                             router=router             172.30.213.8     80/TCP

목록에 서비스가 표시됩니다. 그렇지 않은 경우 서비스를 정의해야 합니다.

서비스 출력에 나열된 IP 주소는 Kubernetes가 해당 서비스를 지원하는 포드 중 하나에 매핑할 Kubernetes 서비스 IP 주소입니다. 따라서 해당 IP 주소와 통신할 수 있어야 합니다. 하지만 가능하더라도 모든 포드에 연결할 수 있는 것은 아닙니다. 그러지 않으면 모든 포드에 연결할 수 없습니다. 이는 kube proxy가 연결한 상태만 알려줍니다.

서비스를 테스트해 보겠습니다. 노드 중 하나에서 다음을 수행합니다.

curl -kv http://172.30.243.225:5000/bar                  # Replace the argument with your service IP address and port

그런 다음 서비스를 지원하는 Pod를 작업합니다(Docker -registry 를 broken 서비스의 이름으로 바꿉니다).

# oc get endpoints --selector=docker-registry
NAME              ENDPOINTS
docker-registry   10.128.2.2:5000

여기에서 엔드포인트가 하나만 있는 것을 확인할 수 있습니다. 따라서 서비스 테스트가 성공하고 라우터 테스트에 성공한 경우 실제로는 분명한 일이 일어나고 있습니다. 하지만 엔드포인트가 두 개 이상 있거나 서비스 테스트에 실패한 경우 각 엔드포인트에 대해 다음을 시도합니다. 작동하지 않는 엔드포인트를 확인한 후 다음 섹션으로 진행합니다.

먼저 각 엔드포인트를 테스트합니다(URL을 변경하여 올바른 엔드포인트 IP, 포트 및 경로를 갖도록 설정).

curl -kv http://10.128.2.2:5000/bar

잘 되셨다면 다음 영상으로 시도해 보십시오. 실패할 경우 메모해 두십시오. 다음 단원에서는 이유를 설명합니다.

모두 실패하면 로컬 노드가 작동하지 않을 수 있습니다. 39.7절. “로컬 네트워킹 디버깅” 섹션으로 이동하십시오.

모두 작동한 다음 39.11절. “Kubernetes 디버깅” 섹션으로 이동하여 서비스 IP 주소가 작동하지 않는 이유를 확인합니다.