1

我在直接路由模式下在 Kubernetes 1.12 中使用 cilium。它在 IPv4 模式下工作正常。我们使用 cilium/cilium:no-routes image 和 cloudnativelabs/kube-router 通过 BGP 通告路由。

现在我想在仅 IPv6 的 Kubernetes 集群中配置相同的配置。但是我发现 kube-router pod 崩溃了,并且没有为 --pod-network-cidr 创建路由条目。

以下是实验室详细信息 -

  • 主节点:IPv6 私有 IP -fd0c:6493:12bf:2942::ac18:1164
  • 工作节点:IPv6私有IP -fd0c:6493:12bf:2942::ac18:1165
  • 两个节点的公共 IP 都是 IPv4,因为我没有 IPv6 公共 IP。

仅 IPv6 的 K8s 集群创建为

掌握:

sudo kubeadm init --kubernetes-version v1.13.2 --pod-network-cidr=2001:2::/64 --apiserver-advertise-address=fd0c:6493:12bf:2942::ac18:1164 --token-ttl 0

工人:

sudo kubeadm join [fd0c:6493:12bf:2942::ac18:1164]:6443 --token 9k9sdq.el298rka0sjqy0ha --discovery-token-ca-cert-hash sha256:b830c22dc21561c9e9287275ecc675ec6de012662fabde3bd1aba03be66562eb

kubectl get nodes -o wide
NAME      STATUS     ROLES    AGE   VERSION   INTERNAL-IP                      
EXTERNAL-IP   OS-IMAGE       KERNEL-VERSION      CONTAINER-RUNTIME
master    NotReady   master   38h   v1.13.2   fd0c:6493:12bf:2942::ac18:1164   
<none>        Ubuntu 18.10   4.18.0-13-generic   docker://18.6.0
worker1   Ready      <none>   38h   v1.13.2   fd0c:6493:12bf:2942::ac18:1165   
<none>        Ubuntu 18.10   4.18.0-10-generic   docker://18.6.0

主节点尚未准备好,因为 cni 尚未配置并且 codedns pod 尚未启动。

现在在 IPv6 中安装 cilium。

1.在主节点运行 etcd。

sudo docker run -d --network=host \
--name "cilium-etcd" k8s.gcr.io/etcd:3.2.24 \
etcd -name etcd0 \
-advertise-client-urls http://[fd0c:6493:12bf:2942::ac18:1164]:4001 \
-listen-client-urls http://[fd0c:6493:12bf:2942::ac18:1164]:4001 \
-initial-advertise-peer-urls http://[fd0c:6493:12bf:2942::ac18:1164]:2382 \
-listen-peer-urls http://[fd0c:6493:12bf:2942::ac18:1164]:2382 \
-initial-cluster-token etcd-cluster-1 \
-initial-cluster etcd0=http://[fd0c:6493:12bf:2942::ac18:1164]:2382 \
-initial-cluster-state new

这里 [fd0c:6493:12bf:2942::ac18:1164] 是主节点 ipv6 ip。

2. sudo mount bpffs /sys/fs/bpf -t bpf

3.运行 kuberouter。

预期结果:

Kube-router 添加对应于集群中其他每个节点的 POD-CIDR 的路由条目。节点公共 IP 将设置为 GW。对于 IPv4,获得以下结果。对于 IPv4,在节点 1 中为节点 2(公共 IP 10.40.139.196 和 POD CIDR 10.244.1.0/24)创建路由条目。Device是绑定公网IP的接口。

$ ip route show

10.244.1.0/24 via 10.40.139.196 dev ens4f0.116 proto 17

注意:仅适用于 IPv6 Kubernetes,--pod-network-cidr=2001:2::/64

实际结果 -

kubectl get pods -n kube-system
NAME                             READY   STATUS              RESTARTS   AGE
coredns-86c58d9df4-g7nvf         0/1     ContainerCreating   0          22h
coredns-86c58d9df4-rrtgp         0/1     ContainerCreating   0          38h
etcd-master                      1/1     Running             0          38h
kube-apiserver-master            1/1     Running             0          38h
kube-controller-manager-master   1/1     Running             0          38h
kube-proxy-9xb2c                 1/1     Running             0          38h
kube-proxy-jfv2m                 1/1     Running             0          38h
kube-router-5xjv4                0/1     CrashLoopBackOff    15         73m
kube-scheduler-master            1/1     Running             0          38h

问题-

kuberouter 可以使用 Kubernetes 集群使用的私有 IPv6 地址,而不是使用在我们的例子中是enter code hereIPv4 的公共 IP。

4

0 回答 0