인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

sh-Ryu님의 프로필 이미지
sh-Ryu

작성한 질문수

대세는 쿠버네티스 [초급~중급]

Dashboard 실행 중 에러가 납니다.

작성

·

1.3K

1

안녕하세요 쿠버네티스 설치 후 Dashboard 설정 중 에러가 납니다.

저의 환경은 azure 클라우드 서버 3개를 써서 case1과 유사하게 하고 있는데요

nohup kubectl proxy --port=8001 --address=<public IP> --accept-hosts='^*$' >/dev/null 2>&1 &

해당 명령어를 입력하고 nohup.out을 보면 bind: cannot assign requested address 라는 에러가 납니다.

8001 포트 방화벽은 해제한 상태입니다.

kubectl get pods --all-namespaces 명령어를 하면 아래와 같이 나오는데 calico-node READY가 0/1 인것과 관련이 있을까요?

답변 부탁드립니다.

답변 14

1

sh-Ryu님의 프로필 이미지
sh-Ryu
질문자

curl podIP:8080/hostname 해도 결과는 똑같이 time out 에러가 납니다..

kubectl logs -n kube-system calico-node-1-.. 하면 아래와 같은 로그가 나옵니다.

2020-04-19 05:05:18.630 [INFO][52] int_dataplane.go 964: Applying dataplane updates

2020-04-19 05:05:18.630 [INFO][52] ipsets.go 223: Asked to resync with the dataplane on next update. family="inet"

2020-04-19 05:05:18.630 [INFO][52] ipsets.go 306: Resyncing ipsets with dataplane. family="inet"

2020-04-19 05:05:18.632 [INFO][52] ipsets.go 356: Finished resync family="inet" numInconsistenciesFound=0 resyncDuration=1.92041ms

2020-04-19 05:05:18.632 [INFO][52] int_dataplane.go 978: Finished applying updates to dataplane. msecToApply=2.161511

kubectl logs -n kube-system kube-proxy-...를 하면 아래와 같은 로그가 나옵니다.

W0417 07:05:41.437308       1 proxier.go:513] Failed to load kernel module ip_vs with modprobe. You can ignore this message when kube-proxy is running inside container without mounting /lib/modules

W0417 07:05:41.438401       1 proxier.go:513] Failed to load kernel module ip_vs_rr with modprobe. You can ignore this message when kube-proxy is running inside container without mounting /lib/modules

W0417 07:05:41.439420       1 proxier.go:513] Failed to load kernel module ip_vs_wrr with modprobe. You can ignore this message when kube-proxy is running inside container without mounting /lib/modules

W0417 07:05:41.440400       1 proxier.go:513] Failed to load kernel module ip_vs_sh with modprobe. You can ignore this message when kube-proxy is running inside container without mounting /lib/modules

W0417 07:05:41.449164       1 server_others.go:249] Flag proxy-mode="" unknown, assuming iptables proxy

I0417 07:05:41.461394       1 server_others.go:143] Using iptables Proxier.

I0417 07:05:41.462037       1 server.go:534] Version: v1.15.11

I0417 07:05:41.471451       1 conntrack.go:52] Setting nf_conntrack_max to 131072

I0417 07:05:41.471604       1 config.go:96] Starting endpoints config controller

I0417 07:05:41.471633       1 controller_utils.go:1029] Waiting for caches to sync for endpoints config controller

I0417 07:05:41.471690       1 config.go:187] Starting service config controller

I0417 07:05:41.471702       1 controller_utils.go:1029] Waiting for caches to sync for service config controller

I0417 07:05:41.571817       1 controller_utils.go:1036] Caches are synced for service config controller

I0417 07:05:41.571885       1 controller_utils.go:1036] Caches are synced for endpoints config controller

kubectl logs -n kube-system calico-kube-controller-... 하면 아래와 같은 로그가 나옵니다.

2020-04-17 07:06:24.224 [INFO][1] main.go 87: Loaded configuration from environment config=&config.Config{LogLevel:"info", ReconcilerPeriod:"5m", CompactionPeriod:"10m", EnabledControllers:"node", WorkloadEndpointWorkers:1, ProfileWorkers:1, PolicyWorkers:1, NodeWorkers:1, Kubeconfig:"", HealthEnabled:true, SyncNodeLabels:true, DatastoreType:"kubernetes"}

2020-04-17 07:06:24.226 [INFO][1] k8s.go 228: Using Calico IPAM

W0417 07:06:24.226804       1 client_config.go:541] Neither --kubeconfig nor --master was specified.  Using the inClusterConfig.  This might not work.

2020-04-17 07:06:24.227 [INFO][1] main.go 108: Ensuring Calico datastore is initialized

2020-04-17 07:06:24.235 [INFO][1] main.go 182: Starting status report routine

2020-04-17 07:06:24.235 [INFO][1] main.go 364: Starting controller ControllerType="Node"

2020-04-17 07:06:24.235 [INFO][1] node_controller.go 133: Starting Node controller

2020-04-17 07:06:24.336 [INFO][1] node_controller.go 146: Node controller is now running

2020-04-17 07:06:24.352 [INFO][1] kdd.go 154: Cleaning up IPAM resources for deleted node node="est2"

2020-04-17 07:06:24.364 [INFO][1] kdd.go 154: Cleaning up IPAM resources for deleted node node="est1"

2020-04-17 07:06:24.368 [INFO][1] kdd.go 167: Node and IPAM data is in sync

네트워크 관련 방화벽은 관련 포트들 전부 오픈하고 설치나 실행도 서버 ip나 hostname 제외하고 가이드와 똑같이 했습니다.. ㅠㅠ

혹시 괜찮으시다면 서버 관련 정보를 알려드릴테니 한번 봐주 실 수 있으신가요?? 메일 주소 알려주시면 보내드리겠습니다..

1

sh-Ryu님의 프로필 이미지
sh-Ryu
질문자

말씀하신 curl clusterIP:9000/hostname 하면 Connection timed out이 나네요.. 위에 dashboard 외부 접근도 Error: 'dial tcp 20.108.215.3:8443: i/o timeout' 나는거 보면 말씀하신 podNetwork가 제대로 동작 안하는 것 같은데 맞나요??

클러스터 구성 안하고 마스터 노드만 생성 하고 dashboard 접근하면 접속이 됩니다. 이전에도 클러스터 구성없이 마스터만 했을때 됐는데 똑같나 보네요.

클러스터 구성간의 문제일까요? kubectl get nodes나 calico 노드들 보면 정상으로 조회 되긴 합니다.

1

sh-Ryu님의 프로필 이미지
sh-Ryu
질문자

서버 다 지우고 처음부터 진행해서 calico는 정상적으로 동작 됐습니다. 그런데 proxy는 여전히 안되네요.. 말씀하신대로 

nohup kubectl proxy --address='0.0.0.0' --port=8001 --accept-hosts='.*'

해서 netstat으로 확인하면 process는 잘 띄워진 것 같습니다. 그런데 접속을 하면

Error: 'dial tcp 20.108.215.3:8443: i/o timeout'

Trying to reach: 'https://20.108.215.3:8443/'

라고 나오네요. 

nohup log를 보니 http: proxy error: context canceled 에러가 나옵니다.

혹시 서비스 대역 ip가 겹쳐서 안되나 해서 kubeadm init --pod-network-cidr=20.96.0.0/12 –service-cidr=30.96.0.0/12 도 해봤는데 이건 netstat으로 8001 포트 검색이 안되더라고요..

제 서버 private IP 대역이 10.0.0.0/24 인데 IP대역 문제인가요..?

몇일째 붙잡고 있는데 안되니 너무 답답하네요..ㅠㅠ

1

sh-Ryu님의 프로필 이미지
sh-Ryu
질문자

버전은 확인해보니 1.18.0인데 버전을 바꿔서 진행해야 할까요?

1

sh-Ryu님의 프로필 이미지
sh-Ryu
질문자

calico 지우고 다시 진행하면서 logs -n 으로 조회 했는데 아래와 같이 나오네요.

10.0.0.18은 worker 노드 private IP 입니다. calico에서 따로 오픈해야 할 포트가 있나요??

인터넷 검색 결과 179 포트 오픈해야 한다 해서 179는 오픈 했습니다. 

1

sh-Ryu님의 프로필 이미지
sh-Ryu
질문자

다른 worker 노드들을 제거하고 master만 남겨뒀을때는 calico-node 1개가 정상적으로 돌아가고 dash보드 또한 접속이 가능하네요. cluster 구성 에서 문제가 있는걸까요??

그리고 dashboard 들어갔을때 아래와 같은 화면으로 에러가 나는데 왜 그런걸까요?

1

sh-Ryu님의 프로필 이미지
sh-Ryu
질문자

kubectl logs -n kube-system calico-node-169qn 명령어 해보니 아래와 같이 나옵니다.

Error from server (NotFound): pods "calico-node-169qn" not found

kubectl get pods 하면 No resources found in default namespace. 라고 뜨고

kubectl get service 하면 CLUSTER-IP 뜨는데(10.96.0.1) host ip와 겹치진 않는것 같습니다.

pod ip 설정은 calico.yaml의

- name: CALICO_IPV4POOL_CIDR

value: "20.96.0.0/12"

이 부분인가요?

그리고 host ip는 외부 ip를 말씀하시는건가요? 아니면 프라이빗 ip를 말씀하시는건가요??

0

안녕하세요 case5의 nat 환경에서 진해중입니다. 대쉬보드가 접속이 안되네요 ㅠㅠ

아래의 명령어를 수행할 때 address에 어떤 주소를 넣으면 될까요?

master인 30.0.2.30의 주소를 넣어야 할까요? 아니면 윈도우 창에서 ipconfig로 조회할 때 나오는 ip(192.168.0.58)를 넣어야할까요??

nohup kubectl proxy --port=8001 --address=30.0.2.30 --accept-hosts='^*$' >/dev/null 2>&1 &

아래와 같이 3개의 ip 주소를 다 했봤으나, 모두 "already in use, bind: cannot assign requested addres"로 나옵니다

[root@k8s-master .kube]# cat nohup.out error: listen tcp 0.0.0.0:8001: bind: address already in use error: listen tcp 30.0.2.20:8001: bind: cannot assign requested address error: listen tcp 192.168.0.58:8001: bind: cannot assign requested address

 

0

일프로님의 프로필 이미지
일프로
지식공유자

clusterIP를 해서 안되면 ServiceNetwork에 문제가 있는거고요.

kubectl get pods pod명 -o wide를 하면 pod ip가 나오는데 

curl podIP:8080/hostname을 해보고 안되면 PodNetwork에 문제가 있는겁니다.

여전히 kubectl logs -n kube-system calico-node-1-... 를 하면 bird: BGP : Unexpected.. 에러가 나나요?

설치하실때 썼던 명령어들을 history를 해서 파일로 올려주시면 참고해 볼께요.

설치할때 Pod Network와 Calico Network Cidr만 잘 마췄다면 문제가 없어야 할텐데요 이상하네요..

그리고 kubectl logs -n kube-system kube-proxy-...를 해서 kube-proxy pod에 나오는 로그들도 같이 올려주시기 바랍니다.

또 네트워크 관련 방화벽이 모두 잘 해제되어 있는지도 다시 확인 바라고요.

0

일프로님의 프로필 이미지
일프로
지식공유자

그림을 보면서 Network 구성에 대해서 이해를 해보시면 좋을 것 같습니다.

먼저 제 가이드대로 하셨다면 Pod Network와 Service Network 설정이 저렇게 되있을 꺼고,

Service Network와 알려주신 Private Network의 시작은 10으로 같지만, 할당되는 IP 범위는 다르기 때문에 문제는 없습니다. 

그리고 Calico 설치시 Network 부분이 Pod Network 대역과 똑같이 마춰줘야 하고요.

이부분이 잘안되면 Calico Network가 잘 동작하지 않아요.

현재 여기까지 잘 되신것 같고,

kubectl proxy 명령을 실행시켜 놓으면

만약 Private Network 내에 있는 Host의 경우 아래 Url로 접속을 할 수가 있고요. 

http://10.0.0.1:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/.

외부에서 접근을 했다면 (외부 IP가 12.4.1.4라고 했을때) 아래 주소로 접근을 할텐데

http://12.4.14:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/.

이때 azure에서 해당 port가 오픈되어 있어야 합니다.

그리고 마지막으로 azure에서 제공하는 터널링 툴이 있다면 localhost로 접근하면 되고요.

여기까지 내용만 잘 되어 있으면 접속을 하는데 아무런 문제가 없어야 합니다.

일단 외부에서 접속은 안되더라도 쿠버네티스가 제대로 설치가됐는지 kubectl 명령으로 테스트 해보시면 좋을것같고요

https://kubetm.github.io/practice/beginner/object-service/

위 실습내용에서 1-1과 1-2를 만들어보고 curl 명령을 날려보면 됩니다. 

(1-1에 nodeSelector부분은 빼도되고요)

각 yaml 파일을 pod.yaml, service.yaml 파일로 만드시고요.

kubectl apply -f pod.yaml / service.yaml 로 적용한다음에

kubectl get svc svc-1로 생성된 clusterIP를 확인해서

curl clusterIP:9000/hostname을 한번 해보세요. 결과가 잘 오면 service network와 pod network 구성에는 문제가 없는거고요.

근데 이전 설치 때는 calico network 구성에 문제가 있었고 dashboard에 연결은 해봤었던 거잖아요? 혹시나 dashboard 접근ip/port 접근이 틀리진 않았을까 싶었는데 이부분은 잘못될리가 없다고 보면 되나요?

제가 지금까지 설명드린 부분들에 대해서 다 그렇게 되어 있고 pod/service 테스트도 정상적으로 됐다면 정말 원인을 찾기가 쉽지 않겠네요.

일단 여기까지 한번 다시 검토해보시고, 문제가 없으면 저도 더 생각을 해보겠습니다.

0

일프로님의 프로필 이미지
일프로
지식공유자

고생이 많으셨네요 ㅠ

근데 이제 거의 다온거 같은데 힘내시고요.

이따 밤에 집에가서 저도 검토해볼께요

0

일프로님의 프로필 이미지
일프로
지식공유자

네 제 가이드대로는 하셔야 정상적으로 작동하거든요.

설치버전에 따른 디펜던시가 많아서요

특히 최신버전에서는 대시보드 skip 버튼은 보안이 강화되서 사용할 수 없고요.

그리고 calico 설치 후 임의로 오픈해야 되는 Port는 지금껏 없었습니다.

0

일프로님의 프로필 이미지
일프로
지식공유자

제가 가이드한 내용에서 변경사항이 없었던거죠? 예를 들어 쿠버네티스 설치 버전을 바꿨다던가요.

host의 외부 ip건 private ip건 pod와 service의 ip대역과 겹치면 안되고요. 겹칠경우 podip나 service ip대역 설정을 변경해줘야합니다.

위에 언급해주신대로 10으로 시작하는 ip가 pod ip 대역이고 20이 service ip대역이고요.

kubectl logs 명령에 pod 이름이 없다고 된 부분은 위에 pod 리스트 화면 캡쳐 올려주신 부분에 cailco이름을 같이 넣은건데  캡쳐화면과 이름이 변경된건 아닌지 다시 확인해보시면 좋겠네요.

0

일프로님의 프로필 이미지
일프로
지식공유자

안녕하세요.

일단 calico 설치 문제부터 해결해야겠습니다.

실제 host ip와 pod ip, Service ip 간에 ip대역에 대한 충돌이 없는지 확인해야 할것 같아요.

kubectl logs -n kube-system calico-node-169qn 명령으로 상세 오류도 보시면 좋고요. 

그럼 다음에도 proxy 명령이 안된다면, 예전 질문중에 aws에서는 아래 명령으로 됐엇는데 한번 해보세요.

nohup kubectl proxy --address='0.0.0.0' --port=8001 --accept-hosts='.*'

sh-Ryu님의 프로필 이미지
sh-Ryu

작성한 질문수

질문하기