我在直接路由模式下在 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 here
IPv4 的公共 IP。