파드를 노출할 Service YAML을 만듭니다. 타입에 따라 필요한 필드가 자동으로 바뀝니다.
labels.app과 같아야 연결됩니다.
서비스명.네임스페이스.svc.cluster.local로 접근합니다.노드IP:포트로 접근하게 합니다. 홈랩이나 테스트에 간편하지만, 포트 번호가 지저분하고 노드 IP를 알아야 해서 운영에는 잘 안 씁니다.EXTERNAL-IP가 <pending>에서 멈춰 있습니다.웹 서비스를 도메인으로 노출하려면 보통 ClusterIP + Ingress 조합을 씁니다. Service를 외부에 직접 여는 대신 Ingress가 도메인·경로·TLS를 처리하게 하는 방식입니다.
예를 들어 컨테이너가 5000번에서 돌지만 서비스는 80으로 받고 싶다면 port: 80, targetPort: 5000이 됩니다. 둘을 같게 두는 경우가 많아 헷갈리기 쉬운데, 값이 다를 때 방향을 반대로 적는 실수가 흔합니다.
대부분 selector가 파드 라벨과 안 맞는 것이 원인입니다. 아래로 확인하세요.
# Endpoints가 비어 있으면 selector가 안 맞는 것
kubectl get endpoints 서비스명 -n 네임스페이스
# 파드에 실제로 붙은 라벨 확인
kubectl get pods -n 네임스페이스 --show-labels
# 클러스터 내부에서 직접 호출해 보기
kubectl run tmp --rm -it --image=curlimages/curl -- \
curl -s http://서비스명.네임스페이스.svc.cluster.local