首页 文章

NAT服务暴露背后的Kubernetes节点

提问于
浏览
0

我正在尝试让一个Kubernetes集群与一些在没有公共IP地址的NAT后工作的节点一起工作 . (为什么我需要它是一个不同的故事)

有3个节点:

  • Kubernetes集群主服务器(带有公共IP地址)

  • Node1(带有公共IP地址)

  • Node2(作为VM在我的笔记本电脑上使用NAT,没有公共IP地址)

所有3个节点都运行Ubuntu 18.04,其中包含Kubernetes v1.10.2(3),Docker 17.12

Kubernetes集群是这样创建的:

kubeadm init --pod-network-cidr=10.244.0.0/16

使用法兰绒网络:

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

Node1和Node2加入了集群:

NAME STATUS ROLES AGE VERSION master-node Ready master 3h v1.10.2 node1 Ready <none> 2h v1.10.3 node2 Ready <none> 2h v1.10.2

为Node1创建和调度的Nginx部署服务(type = NodePort)(使用公共IP):

https://pastebin.com/6CrugunB

kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 3h my-nginx NodePort 10.110.202.32 <none> 80:31742/TCP 16m

可以通过http://MASTER_NODE_PUBLIC_IP:31742http://NODE1_PUBLIC_IP:31742按预期访问此部署 .

为Node2创建和调度的另一个Nginx部署服务(type = NodePort)(没有公共IP):

https://pastebin.com/AFK42UNW

kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 3h my-nginx NodePort 10.110.202.32 <none> 80:31742/TCP 22m nginx-behind-nat NodePort 10.105.242.178 <none> 80:32350/TCP 22m

但是,无法通过http://MASTER_NODE_PUBLIC_IP:32350http://NODE1_PUBLIC_IP:32350访问此服务 .

它只能通过我的笔记本电脑上的http://MY_VM_IP:32350访问 .

而且:我也无法通过 kubectl exec 进入 nginx-behind-nat beans 荚 .

有没有办法实现它?

1 回答

  • 1

    如Kubernetes _1461725中所述:

    Kubernetes对任何网络实施都施加以下基本要求(除非有任何有意的网络分段策略):所有容器都可以与所有其他容器通信而不需要NAT所有节点都可以与所有容器通信(反之亦然)而无需NAT即容器的IP将自己视为与其他人看到的相同的IP在实践中这意味着您不能只使用两台运行Docker的计算机并期望Kubernetes能够正常工作 . 您必须确保满足基本要求 .

    默认情况下,从api-server到节点,端口或服务的连接只是普通的HTTP,没有身份验证和加密 .
    它们可以通过HTTPS工作,但默认情况下,apiserver不会验证HTTPS endpoints 证书,因此,它不会提供任何完整性保证,并且可能受到中间人攻击 .

    有关保护群集内连接的详细信息,请检查此document

相关问题