별도의 네트워크에 있는 Kubernetes 클러스터

별도의 네트워크에 있는 Kubernetes 클러스터

4개의 머신에 Kubernetes 클러스터를 생성하고 싶습니다. 하나는 공용 IP 주소를 가지며 인터넷에서 연결할 수 있습니다(이것을 이라고 부르겠습니다 Master). 마스터에는 도메인 이름도 할당되어 있습니다(예: master.foo).

세 대의 머신이 라우터 뒤의 동일한 개인 네트워크(192.168.5.0)에 있습니다(이것을 이라고 부르겠습니다 Worker A/B/C).

다음 컴퓨터 간에 클러스터를 성공적으로 설정했습니다.

$ kubectl get nodes

NAME           STATUS   ROLES    AGE     VERSION
Master       Ready    master   5d20h   v1.17.1
WorkerA      Ready    <none>   21h     v1.17.1
WorkerB      Ready    <none>   21h     v1.17.1
WorkerC      Ready    <none>   5d17h   v1.17.1

또한 오류 없이 다른 작업자에서 실행되는 포드도 있습니다.

다음을 사용하여 클러스터를 초기화했습니다.

sudo kubeadm init --control-plane-endpoint=master.foo --pod-network-cidr=10.244.0.0/16

(Flannel을 오버레이 네트워크로 사용)

문제는 마스터에서 kubectl exec또는 실행 중 오류가 발생한다는 것입니다.kubectl port-forward

paulb@galaxy:~$ kubectl -n pgo port-forward svc/postgres-operator 8443:8443 
error: error upgrading connection: error dialing backend: dial tcp 192.168.5.192:10250: i/o timeout

192.168.5.192물론 작업자 중 한 명의 개인 IP는 어디에 있습니까? 나는 이것이 여기에 명시된 내용과 관련이 있다고 생각합니다.https://kubernetes.io/docs/concepts/cluster-administration/networking/#the-kubernetes-network-model

pods on a node can communicate with all pods on all nodes without NAT

그렇다면 이 모든 컴퓨터 사이에 OpenVPN 네트워크를 설정해야 합니까? 그렇다면 kubeadm init --control-plane-endpointOpenVPN 어댑터에서 kubernetes가 필요하다는 사실과 어떻게 결합할 수 있습니까 tun0? 내가 뭐 놓친 거 없니? 작업자에서 컨테이너가 실행되고 있는 것이 이상해 보이지만 kubectl exec마스터에서 작업자에 대해 명령( )을 실행할 수 없습니다.

답변1

kubectl port-forward(또는 exec)을 실행하면kubectl에 연결 중입니다API 서버그런 다음 연결됩니다쿠벨렛이는 포트 10250의 모든 노드에서 실행됩니다.

마스터 노드는 워커와 동일한 네트워크에 있지 않고 워커는 외부에서 접근할 수 없기 때문에 마스터 노드에서 실행되는 api-server가 워커에 연결할 수 없습니다.

예, VPN이 문제를 해결할 수 있습니다. 그리고 kubelet을 사용하려면 tun0IP 주소를 다음과 같이 광고해야 합니다.--node-ip kubelet 옵션

--node-ip 문자열
노드의 IP 주소입니다. 설정되면 kubelet은 노드에 이 IP 주소를 사용합니다.

나는 마스터 노드가 외부에서 클러스터로 진입하는 유일한 지점이라고 가정합니다. 따라서 외부에서 포드를 노출하고 액세스할 수 있으려면 모든 노드, 특히 이 경우 마스터와 워커 사이의 완전한 네트워크 연결이 필요합니다.

도움이 되었는지 알려주세요.

관련 정보