AWS EKS 管理的 Kubernetes 工作节点的固定 IP 地址

Fixed IP address for Kubernetes worker node managed by AWS EKS

我正在使用托管 AWS EKS Kubernetes 集群。对于工作节点,我在 EKS 集群中设置了一个节点组,其中包含 2 个工作节点

这些工作节点获得由 EKS 自动分配的 public IP:

$ kubectl get nodes -o wide
NAME                                          STATUS   ROLES    AGE   VERSION              INTERNAL-IP   EXTERNAL-IP     OS-IMAGE         KERNEL-VERSION                  CONTAINER-RUNTIME
ip-10-0-0-129.eu-central-1.compute.internal   Ready    <none>   6d    v1.14.7-eks-1861c5   10.0.0.129    1.2.3.4         Amazon Linux 2   4.14.146-119.123.amzn2.x86_64   docker://18.6.1
ip-10-0-1-218.eu-central-1.compute.internal   Ready    <none>   6d    v1.14.7-eks-1861c5   10.0.1.218    5.6.7.8         Amazon Linux 2   4.14.146-119.123.amzn2.x86_64   docker://18.6.1

对于此示例,我们假设 AWS 自动分配的值为 1.2.3.45.6.7.8

当 运行 来自第一个节点上的 pod 运行 内部的命令时,我还可以看到这是发出外部请求的 IP 地址:

$ curl 'https://api.ipify.org'
1.2.3.4

我现在面临的问题是我想配置这个IP地址。假设我在 pod 中使用了一项我无法控制的服务,并且需要通过 IP 地址加入白名单。

我还没有找到任何方法来指定 AWS 将从中选择 IP 地址的节点组(或集群所在 VPC 的子网设置)的 IP 地址范围。

是否有任何其他方法可以将工作节点配置为使用固定 IP 地址?

目前无法将弹性 IP 与作为 EKS 节点组一部分的实例 运行ning 相关联。但是,我将为您提供一个更好的替代方案,应该在您的设置中使用,它基本上都是 public.

首先,运行 私有子网内的工作节点或节点组。这将使您能够通过静态 ip 路由到 Internet。

要获得可以在所需服务上列入白名单的静态 IP,请使用 NAT 网关。 Setup instructions。 NAT 网关将与一个不会改变的弹性 IP 相关联。

由于您是 运行ning EKS,请不要忘记使用 AWS_VPC_K8S_CNI_EXTERNALSNAT = true 修改 aws-vpc-cni 配置。这对于 pods 正确工作和路由到互联网至关重要。如果设置为 true,则不应用 SNAT iptables 规则和 off-VPC IP 规则,如果这些规则已经应用,则删除这些规则。为此,您的节点必须 运行 位于私有子网中,并通过 AWS NAT 网关或其他外部 NAT 设备连接到互联网。 more info on aws-vpc-cni