• 카테고리

    질문 & 답변
  • 세부 분야

    데브옵스 · 인프라

  • 해결 여부

    미해결

nodeport 질문드립니다.

22.08.30 23:53 작성 조회수 789

0

nodeport 테스트중 궁굼한 사항이 있어 문의드립니다.

k apply -f Lecturek8s_learning.kit/ch4/4.3/nodeport.yaml

우선 위 파일을 실행 시켰습니다.

실행은 정상적으로 되었는데요.

  1. 아래와 같이 첫번째 pod에 접속해서 index.html을 수정하고자 하면 내용이 아무것도 없는것으로 나옵니다. (2,3번째 pod는 정상적으로 노출됩니다.) 혹시 발생하는 원인을 알 수있을까요? (제거 후 새로 생성해도 동일하네요.)

스크린샷 2022-08-30 오후 11.43.22.png

  1. 예제 파일에서 nodePort를 30000으로 강제하고 있는데요.(nodePort: 30000)
    실제 w1-k8s, w2-k8s, w3-k8s 노드로 접근 후 'netstat -napt | grep 30000' 명령어를 실행해 보면 30000 포트가 없습니다. (동작은 정상적으로 되는것 같습니다만..) 노드마다 30000가 열려있어야 하는게 아닌가요? (k get svc시 노드별 30000포트가 열려있는게 맞죠?)
    스크린샷 2022-08-30 오후 11.48.14.png

  2. 브라우져(브라우져 캐시도 껐어요)에서 nodeIP:3000으로 접속시 2번 pod로만 접속이 됩니다. (exec로 내부 index.html을 변경해서 테스트했습니다.) clusterIP로 curl 로 테스트 할때는 로드밸런싱이 되는데요. 노드:30000으로 접근시에는 2번으로만 접속이 되는데요. 이 부분도 이유를 알 수 있을까요? (참고로, 노드포트로 접속시에도 로드밸런싱되는 것으로 알고있습니다.
    (curl로 노드에서 직접 테스트해보면 또 로드밸런싱이 되네요--;)

  3. 노드ip:30000 로 접속시 clusterIP -> pod 로 접근되는건 맞나요?

질문이 많네요. ㅎ

확인 부탁드리겠습니다.^^

답변 1

답변을 작성해보세요.

1

안녕하세요

1.Pod 별 index.html

그럴리가 없어서 다시 한번 다음과 같이 확인해 봤으나, 모두 있습니다. 다시 한번 확인해 보시는게 좋으실꺼 같습니다.

더 정확한 확인을 원하신다면 index.html이 없다고 파악된 pod를 지워서 다시 생성되도록 해보시기 바랍니다.

[root@m-k8s ~]# k get po

NAME READY STATUS RESTARTS AGE

alpine-6d78db7bf8-l7dfx 1/1 Running 2 (2m52s ago) 129d

deploy-nginx-9995864d4-gf88q 1/1 Running 0 55s

deploy-nginx-9995864d4-vd6pv 1/1 Running 0 55s

deploy-nginx-9995864d4-zs57h 1/1 Running 0 55s

nfs-client-provisioner-5bf5dc748b-dwvp8 1/1 Running 8 (2m52s ago) 203d

[root@m-k8s ~]# k exec deploy-nginx-9995864d4-gf88q -it -- ls /usr/share/nginx/html

50x.html index.html

[root@m-k8s ~]# k exec deploy-nginx-9995864d4-vd6pv -it -- ls /usr/share/nginx/html

50x.html index.html

[root@m-k8s ~]# k exec deploy-nginx-9995864d4-zs57h -it -- ls /usr/share/nginx/html

50x.html index.html

2.노드별 listen port

네 적어주신 내용은 맞는데, LISTEN하지 않을리가 없어서 아래와 같이 확인해 보니 Listen하고 있습니다.

다시 한번 확인해 보시는게 좋으실꺼 같습니다...

[root@w1-k8s ~]# netstat -napt | grep 30000

tcp 0 0 0.0.0.0:30000 0.0.0.0:* LISTEN 1658/kube-proxy

[root@w2-k8s ~]# netstat -napt | grep 30000

tcp 0 0 0.0.0.0:30000 0.0.0.0:* LISTEN 1445/kube-proxy

[root@w3-k8s ~]# netstat -napt | grep 30000

tcp 0 0 0.0.0.0:30000 0.0.0.0:* LISTEN 1407/kube-proxy

3.NodePort 접속

지금 nginx로 배포되어 있어서 curl 확인이 어려워서 다음과 같이 이미지를 변경한 후에..

[root@m-k8s ~]# k get deployments.apps deploy-nginx -o yaml | grep image:

- image: sysnet4admin/chk-hn

nodePort로 curl을 해 보았습니다.

[root@m-k8s ~]# ~/_Lecture_k8s_learning.kit/ch9/9.8/curl-get.sh 192.168.1.101:30000

<snipped>

452 - deploy-nginx-b645fbdcc-gvkrw

453 - deploy-nginx-b645fbdcc-dxkj4

454 - deploy-nginx-b645fbdcc-dxkj4

455 - deploy-nginx-b645fbdcc-dxkj4

456 - deploy-nginx-b645fbdcc-gvkrw

457 - deploy-nginx-b645fbdcc-dxkj4

458 - deploy-nginx-b645fbdcc-kjrb6

459 - deploy-nginx-b645fbdcc-dxkj4

460 - deploy-nginx-b645fbdcc-dxkj4

461 - deploy-nginx-b645fbdcc-gvkrw

462 - deploy-nginx-b645fbdcc-kjrb6

463 - deploy-nginx-b645fbdcc-dxkj4

464 - deploy-nginx-b645fbdcc-dxkj4

LoadBalancer가 됩니다. 브라우저에서 하신다면 캐시를 다시한번 확인해 보시고, 또는 브라우저 자체를 여러개 써서 확인해 보시는게 좋으실꺼 같습니다.

호스트 OS에서 해도 마찬가지입니다.

➜  9.8 git:(main) ✗ (☸️ |gke:default) ./curl-get.sh 192.168.1.101:30000

./curl-get.sh: line 3: COUNTER: command not found

1 - deploy-nginx-b645fbdcc-kjrb6

2 - deploy-nginx-b645fbdcc-dxkj4

3 - deploy-nginx-b645fbdcc-kjrb6

4 - deploy-nginx-b645fbdcc-kjrb6

5 - deploy-nginx-b645fbdcc-dxkj4

6 - deploy-nginx-b645fbdcc-gvkrw

7 - deploy-nginx-b645fbdcc-dxkj4

8 - deploy-nginx-b645fbdcc-kjrb6

9 - deploy-nginx-b645fbdcc-dxkj4

10 - deploy-nginx-b645fbdcc-gvkrw


4.노드ip:30000 로 접속시 clusterIP -> pod 로 접근되는건 맞나요?

아닙니다. 도달한 노드에 pod가 없다면 trafficPolicy에 따라서 cluster 또는 Local로서 해당 Pod를 찾아 next hop으로 넘어갑니다.

이에 대한 자세한 내용은 관련 내용들에 대한 (iptable,chain,snat등) 이해가 필요하긴 하나..쉽게 설명한 커피고래님의 패킷의 삶을 보시는 것도 좋으실꺼 같습니다.