티스토리 뷰
1. 문제#1: CoreDNS를 통한 내부 DNS 확인
1) 문제시나리오
(1) 서비스 생성
- nginx 이미지를 사용하여 Deployment와 ClusterIP 서비스를 생성
- Deployment 이름: nginx-deployment, 서비스 이름: 'nginx-service'
(2) DNS 테스트
- 테스트용 Pod를 생성
- 테스트용 Pod에서 nginx-service와 FQDN(nginx-service.default.svc.cluster.local)으로 요청을 보냄
- 요청이 성공적으로 전달되는지 확인
2) 해결과정
(1) Deployment및 Service YAML작성
- nginx-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
- nginx-service.yaml
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx # Deployment와 연결될 Selector 설정
ports:
- protocol: TCP
port: 80 # 서비스 포트 (클라이언트가 접근할 포트)
targetPort: 80 # Pod 내부 컨테이너 포트 (NGINX 기본 포트)
type: ClusterIP # 기본 서비스 타입
(2) Deployment 및 서비스 생성
kubectl apply -f nginx-deployment.yaml
kubectl apply -f nginx-service.yaml
(3) 테스트용 Pod에서 DNS 테스트
kubectl run test-pod --image=busybox --restart=Never -- sh -c "nslookup nginx-service.default.svc.cluster.local"
Server: 10.96.0.10
Address: 10.96.0.10#53
Name: nginx-service.default.svc.cluster.local
Address: 10.96.233.123
2. 문제#2 CoreDNS 트러블 슈팅
1)문제 시나리오
- CoreDNS가 제대로 작동하지 않는 문제를 해결하십쇼
(1) CoreDNS 트러블 슈팅
- 클러스터에서 실행중인 CoreDNS Pod가 제대로 작동하는지 확인
- 테스트용 Pod를 생성하여 내부서비스(nginx-service.default.svc.cluster.local)에 대한 DNS쿼리를 실행
- DNS응답이 실패하면 원인을 분석하고 문제를 해결
(2) 결과확인
- 테스트용 Pod에서 요청을 보냄
2)해결과정
(1) CoreDNS Pod,SVC, Endpoints 정상 작동여부 확인
kubectl get pods -n kube-system -l k8s-app=kube-dns
NAME READY STATUS RESTARTS AGE
coredns-558bd4d5db-abcde 1/1 Running 0 10d
coredns-558bd4d5db-fghij 1/1 Running 0 10d
kubectl get svc -n kube-system
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP 10d
kubectl get endpoints -n kube-system kube-dns
NAME ENDPOINTS AGE
kube-dns 10d
- 여기서 endpoints가 없음을 확인가능.
- SVC와 POD간의 selector 라벨이 잘못될 가능성이 있다.
(2) 서비스 Selector 점검
kubectl describe svc kube-dns -n kube-system
..................
selector: k8s-app=core-dns
................
kubectl get pods -n kube-system --show-labels | grep coredns
NAME READY STATUS RESTARTS AGE LABELS
coredns-558bd4d5db-abcde 1/1 Running 0 10d k8s-app=kube-dns,pod-template-hash=558bd4d5db
coredns-558bd4d5db-fghij 1/1 Running 0 10d k8s-app=kube-dns,pod-template-hash=558bd4d5db
- 서비스 selector가 pod의 라벨과 다름을 알수 있다.
(3) CoreDNS서비스 수정
kubectl edit svc kube-dns -n kube-system
selector:
k8s-app: kube-dns # Pod 레이블과 일치하도록 수정!
(4) Endpoints 갱신 확인
kubectl get endpoints -n kube-system kube-dns
NAME ENDPOINTS AGE
kube-dns 192.168.0.2:53,192.168.0.3:53 10d
(5) 테스트용 Pod 생성 및 DNS 테스트
kubectl run test-pod --image=busybox --restart=Never -- sh -c "nslookup nginx-service.default.svc.cluster.local"
Server: 10.96.0.10
Address: 10.96.0.10#53
Name: nginx-service.default.svc.cluster.local
Address: 10.96.x.x # ClusterIP 주소 반환됨.
'쿠버네티스' 카테고리의 다른 글
killer.sh 문제 정리 (1) | 2025.01.05 |
---|---|
CKA 기출문제 정리 PV (2) | 2025.01.02 |
CKA 기출문제 정리 external name (0) | 2025.01.02 |
CKA 기출문제 정리 NetworkPolicy (1) | 2025.01.02 |
CKA 기출문제 LoadBalancer (0) | 2025.01.01 |