1

我从K8S开始。我在 Azure 上安装了 2 个 Debian 10 VM(1 个主节点和 2 个从属节点)。

我用这个文档安装了主节点: https ://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/

我用这个安装了 Calico: https ://docs.projectcalico.org/getting-started/kubernetes/installation/calico#installing-with-the-kubernetes-api-datastore50-nodes-or-less

我创建了一个简单的 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

从头开始安装:

  1. 一个 pod 可以 ping 另一个主机上的一个 pod 吗?
  2. 是否可以从主节点卷曲到工作节点上的 pod?
  3. azure 是否应用限制并阻止 k8s 正常工作?
4

2 回答 2

1

我花了 1 周的时间来解决它。

  • 从主节点,您想要 ping/curl 位于工作节点上的 Pod。这些 Pod 是 Deployment 的一部分,本身通过 Service 公开。
  • Azure 网络中有一些细节,这使得默认的 Calico 安装不能“开箱即用”。

使 Calico 在 Azure 上工作的步骤

  1. 在 Kubernetes 中,在没有网络后端的情况下安装 Calico。
  2. 在 Azure 中,在每个主机上启用 IP 转发。
  3. 在 Azure 中,创建 UDR(用户定义的路由)。

1. Kubernetes,在没有网络后端的情况下安装 Calico

A) 禁用 Bird 默认情况下,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 守护程序集 pod 将无法启动。在 Calico Manifest 中,注释掉“--bird-live”和“--bird-ready”。

在此处输入图像描述

到这里就大功告成了,可以应用文件了:kubectl apply -f

2. Azure,在每台主机上启用IP转发

对于 Azure 中的每个 VM:

  • 单击它>网络>单击您拥有的网络接口。 在此处输入图像描述
  • 点击 IP 配置
  • 将 IP 转发设置为已启用。 在此处输入图像描述

对每个 VM 重复此操作,您就完成了。

注意:根据Azure 文档,IP 转发使虚拟机能够连接网络接口:

  • 接收不发往分配给网络接口的任何 IP 配置的 IP 地址之一的网络流量。
  • 使用与分配给网络接口的 IP 配置之一不同的源 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 上,按照有关如何“创建路由表”、“添加路由表”和“将路由表关联到子网”的文档进行操作(只需滚动文档,部分在另一个下方)。

最终结果应如下所示: 在此处输入图像描述

你完成了!您现在应该能够 ping/curl 位于其他节点上的 Pod。

参考链接

所有参考链接都解释了 Azure 网络的细节,以及将 Calico 与 Azure 结合使用的不同方法(网络+网络策略,或仅网络策略)。

特别是,有 3 种方法可以让 Calico 在 Azure 上运行。

  1. 我们刚刚看到的,路由由用户管理。似乎这可以称为“用户管理的网络”。
  2. 使用 Azure CNI IPAM 插件。在这里,我们可以说“Azure 托管网络”。Azure 将在 Azure 子网内为每个 Pod 分配一个 IP,以便 Azure 知道如何路由流量。
  3. 印花布处于 VXLAN 模式。在这里,Calico 会将每个 paquet 包装在另一个数据包中,包装器将仅包含主机 IP,以便 Azure 知道如何路由它们。然后,当到达目标节点时,Calico 解开包裹以发现真正的目标 IP,这将是位于 Calico 子网中的 Pod IP。

在下面的文档中,有关于每个设置的权衡的解释,特别是 Youtube 视频。

词汇:

  • CNI = 容器网络接口
  • IPAM = IP 地址管理(分配 IP 地址)
于 2021-04-24T11:38:33.597 回答
1

一个 pod 可以 ping 另一个主机上的一个 pod 吗?

根据kubernetes 网络模型,只要您安装了 CNI 提供程序,就可以。

是否可以从主节点卷曲到工作节点上的 pod?

您需要创建 Nodeport 或 Loadbalancer 类型的服务来从集群外部访问您的 pod 以及从节点访问 pod。

azure 是否应用限制并阻止 k8s 正常工作?

可能有防火墙限制虚拟机之间的流量。

于 2020-02-14T08:40:32.153 回答