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 주소가 작동하지 않는 이유를 확인합니다.