티스토리 뷰

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
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함