gpt4 book ai didi

kubernetes - 为什么虚拟机实例上的 Kubernetes 集群 Google Cloud 无法将主机与 NodePort 连接?

转载 作者:行者123 更新时间:2023-12-03 22:24:55 26 4
gpt4 key购买 nike

我已经使用这个 tutorial. 安装了一个 kubernetes 集群
当我在 VM Virtual Box 上设置它时 - 我的主机可以正常连接 NodePort。当我在 Compute Engine 虚拟机实例上尝试时,Kubernetes 集群无法通过 NodePort 连接主机?

我附上了两张图片。
感谢您的支持。

Kubernetes cluster (bare metal) on Local VM Virtual Box
Kubernetes cluster (bare metal) on Google cloud Platform VM Instances

最佳答案

这花了我一段时间来测试,但我终于有了结果。所以事实证明你的问题的原因是 Calico 和 GCP 防火墙。更具体地说,您必须先添加防火墙规则,然后才能成功连接。
关注此 document关于为 GCE 安装 Calico:

GCE blocks traffic between hosts by default; run the following command to allow Calico traffic to flow between containers on different hosts (where the source-ranges parameter assumes you have created your project with the default GCE network parameters - modify the address range if yours is different):



所以你需要允许流量在容器之间流动:
gcloud compute firewall-rules create calico-ipip --allow 4 --network "default" --source-ranges "10.128.0.0/9"
请注意,应更改此 IP。您可以用于测试目的 10.0.0.0/8但这是扩大范围的方式,所以 请根据您的需要缩小范围。

然后继续为主节点和节点设置实例。
您实际上可以跳过您发布的教程中的大部分步骤,因为连接是由云提供商解决的。这是我在 VM 上用于 Kubeadm 的一个非常简单的脚本。您也可以逐步执行此操作。
#!/bin/bash
swapoff -a
echo net/bridge/bridge-nf-call-ip6tables = 1 >> /etc/ufw/sysctl.conf
echo net/bridge/bridge-nf-call-iptables = 1 >> /etc/ufw/sysctl.conf
echo net/bridge/bridge-nf-call-arptables = 1 >> /etc/ufw/sysctl.conf
apt-get install -y ebtables ethtool
apt-get update
apt-get install -y docker.io
apt-get install -y apt-transport-https
apt-get install -y curl
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb http://apt.kubernetes.io/ kubernetes-xenial main
EOF
apt-get update
apt-get install -y kubelet kubeadm kubectl
kubeadm init --pod-network-cidr=192.168.0.0/16
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
kubectl apply -f https://docs.projectcalico.org/v3.2/getting-started/kubernetes/installation/hosted/rbac-kdd.yaml
kubectl apply -f https://docs.projectcalico.org/v3.2/getting-started/kubernetes/installation/hosted/kubernetes-datastore/calico-networking/1.7/calico.yaml
kubectl taint nodes --all node-role.kubernetes.io/master-

就我而言,我使用了来自 Kubernetes 的简单 Redis 应用程序 documentation
root@calico-master:/home/xxx# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 29m
redis-master ClusterIP 10.107.41.117 <none> 6379/TCP 26m

root@calico-master:/home/xxx# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE
redis-master-57fc67768d-5lx92 1/1 Running 0 27m 192.168.1.4 calico <none>

root@calico-master:/home/xxx# ping 192.168.1.4
PING 192.168.1.4 (192.168.1.4) 56(84) bytes of data.
64 bytes from 192.168.1.4: icmp_seq=1 ttl=63 time=1.48 ms

在防火墙规则和常规 Calico 安装之前,我无法 ping,也无法执行 wget之后从服务中 ping IP 或主机名没有问题,并且 wget 也可以工作:
> root@calico-master:/home/xxx# wget http://10.107.41.117:6379
> --2018-10-24 13:24:43-- http://10.107.41.117:6379/ Connecting to 10.107.41.117:6379... connected. HTTP request sent, awaiting response... 200 No headers, assuming HTTP/0.9 Length: unspecified
> Saving to: ‘index.html.2’

上述步骤也针对 type: NodePort 进行了测试它也能工作。

另一种方法是使用 Flannel我也测试过,它开箱即用,可以满足测试您的问题的需要。请务必阅读有关 CNI 的更多信息,以便您可以选择适合您需求的产品。
希望这能解决您的问题。

关于kubernetes - 为什么虚拟机实例上的 Kubernetes 集群 Google Cloud 无法将主机与 NodePort 连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52732524/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com