我们即将开始在我们自己的数据中心的裸机上设置一个新的 Kubernetes 集群。Kubernetes 模块和服务的文档很棒,但是我找不到任何关于满足我们要求所需组件的全面顶视图文档:
Pod 需要通过 IPv4 和 IPv6 进行访问 Pod 需要能够在主机之间移动,并且仍然可以通过两种协议进行访问 Pod 需要通过 IPv4 和 IPv6 访问外部资源 我知道可以使用 MetalLb 进行入口流量管理。但是当 Pod 尝试访问外部 v4/v6 资源时,这是否也能起作用?
总体来说,要满足要求需要做什么?
答案1
我使用 Kubernetes 1.21 和 Calico 在 BGP 路由器/防火墙 (Juniper SRX) 后面进行联网,以实现外部连接。Calico 可以与 metallb 结合使用,其中 metallb 负责编排,Calico 负责 BGP 路由。请参阅https://docs.projectcalico.org/networking/advertise-service-ips#advertise-service-load-balancer-ip-addresses了解更多详细信息。
添加 nginx 用于入口,添加 cert-manager 用于证书,这样你就拥有了所需的一切。
我确实注意到负载均衡器不处理双栈,但您可以通过创建两个独立的负载均衡器轻松解决这个问题:一个单栈 IPv6 和一个单栈 IPv4。
答案2
我正在使用带有 Calico 和 BGP(不带 metalb)的 Kubernetes 1.21。
使用 traefik 作为入口并使用 cert-manager 作为证书。
Traefik 负载均衡器确实支持双栈,至少在没有 metalb 的情况下,但需要您ipFamilyPolicy
在服务上设置为PreferDualStack
,并使用 IPv6 cidr 配置服务 cidr(这应该在 kubeadm v1.21+ 上默认完成)。我必须将 RequireDualStack 与 k3s 一起使用才能接受 IPv6 连接。
https://kubernetes.io/docs/concepts/services-networking/dual-stack/#services https://kubernetes.io/docs/tasks/network/validate-dual-stack/