LabHub

CKA — 쿠버네티스 관리자 · 서비스와 네트워킹 · 실습

서비스로 트래픽 붙이기

LabHub 에서 이어서 보기

목표

서비스 타입 다섯 가지와 인그레스를 직접 만들고, 셀렉터가 어긋나 엔드포인트가 비는 상황을 만들어 고칩니다.

왜 중요한가

시험에서 "서비스를 만들었는데 접속이 안 된다" 는 문제는 대부분 셀렉터, 포트, Ready 셋 중 하나입니다. Service 오브젝트가 트래픽을 나르는 것이 아니라 셀렉터로 백엔드 목록을 만드는 선언이라는 점을 이해하면 진단 순서가 자동으로 정해집니다. 엔드포인트에 IP 가 있는지부터 봅니다. 있으면 데이터플레인이나 포트 문제이고, 없으면 셀렉터나 파드 Ready 문제입니다.

targetPortport 를 구분하는 것도 중요합니다. port 는 서비스가 여는 포트, targetPort 는 파드 쪽 포트입니다. 둘이 같으면 생략할 수 있어 헷갈리기 쉽지만, 다르게 두는 순간 실수가 드러납니다.

단계

1. 네임스페이스 cka-net 을 만들고 Deployment web (레플리카 2, 이미지 nginx:1.27, 파드 라벨 app=web)을 만든다. 그 다음 ClusterIP 서비스 web-svc 를 만든다. port 80, targetPort 80, 셀렉터 app=web.
2. Deployment api (레플리카 2, 이미지 nginx:1.27, 파드 라벨 app=api)를 만든다. 서비스 api-svc셀렉터 app=api-server 로 잘못 만든 뒤 엔드포인트 조회 결과를 /root/cka-net/endpoints-before.txt 에 저장한다. 그 다음 셀렉터를 app=api 로 고친다.
3. NodePort 서비스 web-np 를 만든다. port 80, 셀렉터 app=web, nodePort 는 30080 으로 직접 지정한다.
4. Deployment db (레플리카 1, 이미지 nginx:1.27, 파드 라벨 app=db)를 만들고 헤드리스 서비스 db-headless 를 만든다. clusterIP None, port 5432, 셀렉터 app=db.
5. 서비스 multi-svc 를 만든다. 셀렉터 app=web, 포트 두 개 — 이름 http (port 80, targetPort 8080), 이름 metrics (port 9090).
6. 서비스 ext-db 를 만든다. type ExternalName, externalName nas.homelab.internal.
7. 인그레스 web-ing 을 만든다. ingressClassName nginx, host cka.homelab.internal, 경로 / (pathType Prefix)는 web-svc 의 80 포트로, 경로 /api (pathType Prefix)는 api-svc 의 80 포트로 보낸다.

참고

단계 7개

  1. ClusterIP 서비스와 엔드포인트
  2. 셀렉터 오타로 엔드포인트가 비는 상황
  3. NodePort 번호 직접 지정하기
  4. 헤드리스 서비스
  5. 포트 두 개 노출하기
  6. ExternalName 으로 외부 시스템 가리기
  7. 종합: 인그레스로 두 서비스 묶기