我从K8S开始。我在Azure上安装了2个Debian 10 VM(1个主节点和2个从节点)。
我使用此文档安装了主节点: https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/
我创建了一个简单的nginx部署:
kubectl run nginx --replicas=2 --image=nginx
我有以下吊舱(sazultk8s1 / 2是工作节点):
root@itf-infra-sazultk8s0-vm:~# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE
nginx-6db489d4b7-mzmnq 1/1 Running 0 12s 192.168.47.18 itf-infra-sazultk8s2-vm
nginx-6db489d4b7-sgdz7 1/1 Running 0 12s 192.168.247.115 itf-infra-sazultk8s1-vm
在主节点上,我无法卷曲到这些nginx:
root@itf-infra-sazultk8s0-vm:~# curl 192.168.47.18 --connect-timeout 5
curl: (28) Connection timed out after 5001 milliseconds
root@itf-infra-sazultk8s0-vm:~# curl 192.168.247.115 --connect-timeout 5
curl: (28) Connection timed out after 5000 milliseconds
我尝试了一个简单的busybox图片:
kubectl run access --rm -ti --image busybox /bin/sh
/ #ifconfig eth0 | grep -i inet
inet addr:192.168.247.116 Bcast:0.0.0.0 Mask:255.255.255.255
/ # wget --timeout 5 192.168.247.115
Connecting to 192.168.247.115 (192.168.247.115:80)
saving to 'index.html'
index.html 100% |********************************************************************************************************| 612 0:00:00 ETA
'index.html' saved
/ # wget --timeout 5 192.168.47.18
Connecting to 192.168.47.18 (192.168.47.18:80)
wget: download timed out
从头开始安装:
答案 0 :(得分:0)
吊舱可以ping通另一台主机上的吊舱吗?
根据kubernetes networking model是,只要您安装了CNI提供程序即可。
是否可以从主节点卷曲到工作节点上的Pod?
您需要创建Nodeport或Loadbalancer类型的服务才能从集群外部访问Pod,并从节点访问Pod。
天蓝色会施加限制并阻止k8正常工作吗?
可能有防火墙限制了VM之间的流量。
答案 1 :(得分:0)
我花了 1 周时间才解决。
使 Calico 在 Azure 上运行的步骤
1. Kubernetes,在没有网络后端的情况下安装 Calico
A) 禁用鸟
默认情况下,calico.yaml 未配置为使用 bird
作为网络后端,您必须将其设置为 none
。
官方安装步骤:https://docs.projectcalico.org/getting-started/kubernetes/self-managed-onprem/onpremises
在应用 -f calico.yaml
之前,编辑文件。
搜索变量 CALICO_NETWORKING_BACKEND
我们看到该值取自 ConfigMap。
编辑 ConfigMap 中的值(位于文件顶部),将其设置为 none
而不是默认的 bird
。
B) 从 Readiness & Liveliness 探针中移除 Bird
鉴于我们已经停用了 Bird,它应该从 Readiness & Liveliness porbes 中移除,否则,calico-node deamon set pod 将无法启动。在 Calico Manifest 中,注释掉“--bird-live”和“-bird-ready”。
到这里就大功告成了,可以申请文件了:kubectl apply -f
2. Azure,在每台主机上启用 IP 转发
对于 Azure 中的每个 VM:
对每个 VM 重复,就完成了。
注意:根据 Azure doc,IP 转发启用网络接口附加到的虚拟机:
3. Azure,创建 UDR(用户定义路由)
接下来,您必须在您的 Azure 子网上创建 UDR,以便 Azure 可以将目标流量路由到(由 Calico 在目标主机上创建的 Pod 子网),到(实际目标主机本身的 IP)。以便 Azure 知道针对该 calico 子网的流量必须路由到适当的节点,否则 Azure 不知道如何处理此流量。 然后,当到达目标节点时,目标知道如何将流量路由到其底层 Pod。
首先,确定 Calico 在每个节点上创建的子网。
kubectl get ipamblocks.crd.projectcalico.org \
-o jsonpath="{range .items[*]}{'podNetwork: '}{.spec.cidr}{'\t NodeIP: '}{.spec.affinity}{'\n'}"
在 Azure 上,follows the documentation 关于如何“创建路由表”、“添加路由表”和“将路由表关联到子网”(只需滚动文档,部分如下另一个)。
你完成了!您现在应该可以 ping/curl 位于其他节点上的 Pod。
参考链接
所有参考链接都解释了 Azure 网络的微妙之处,以及将 Calico 与 Azure 结合使用的不同方式(网络+网络策略,或仅网络策略)。
特别是,有 3 种方法可以让 Calico 在 Azure 上工作。
在下面的文档中,解释了每种设置的权衡,尤其是 Youtube 视频。
词汇: