如何在 AKS 上将传入的 Ingress 流量公开给 IPv4 或 IPv6?

How do I expose my incoming Ingress traffic to both IPv4 or IPv6 on AKS?

我正在使用 kubernetes/ingress-nginx helm chart,我想 "DualStack" 在同一个 Ingress 控制器上同时使用 IPv4 和 IPv6。

helm chart controller.service.loadBalancerIP 只接受一个字符串,我假设它只能是一个 IP 地址。 IPv4 或 IPv6。

如何在 AKS 上向 IPv4 或 IPv6 公开我的入口流量?

(我不想为此设置两个入口控制器)

要同时允许 IPv4 和 IPV6,最简单的方法是为您的 NGINX 入口控制器配置两个 kubernetes 服务。

正常部署您的 Charts 并使用基于 https://github.com/kubernetes/ingress-nginx/blob/master/charts/ingress-nginx/templates/controller-service.yaml

的原始 kubernetes 清单对其进行扩充

一个服务将默认为 IPFamily IPv4,而第二个服务应将 ipFamily 设置为 IPv6

https://kubernetes.io/docs/concepts/services-networking/dual-stack/#services

这将使您必须准备好前端 IP 来处理 IPv4 和 IPv6 流量。

然后您可以使用外部 DNS 服务使两个 IP (v4/v6) 具有相同的 DNS 主机名。 (一个A记录,一个AAAA记录)。

来自 Kubernetes v1.16 IPv4/IPv6 dual-stack is added as alpha feature, which means you need to enable it via feature gates

To enable IPv4/IPv6 dual-stack, enable the IPv6DualStack feature gate for the relevant components of your cluster, and set dual-stack cluster network assignments:

  • kube-apiserver: - --feature-gates="IPv6DualStack=true"
  • kube-controller-manager: - --feature-gates="IPv6DualStack=true" - --cluster-cidr=<IPv4 CIDR>,<IPv6 CIDR> - --service-cluster-ip-range=<IPv4 CIDR>,<IPv6 CIDR> - --node-cidr-mask-size-ipv4|--node-cidr-mask-size-ipv6 defaults to /24 for IPv4 and /64 for IPv6
  • kubelet: - --feature-gates="IPv6DualStack=true"
  • kube-proxy: - --cluster-cidr=<IPv4 CIDR>,<IPv6 CIDR> - --feature-gates="IPv6DualStack=true"

Note: An example of an IPv4 CIDR: 10.244.0.0/16 (though you would supply your own address range) An example of an IPv6 CIDR: fdXY:IJKL:MNOP:15::/64 (this shows the format but is not a valid address - see RFC 4193)

您还需要一个支持双栈的 CNI,例如 Calico,您可以查看如何 Enable dual stack

不幸的是,我不知道如何在 AKS 上执行此操作。