如何为我的 EKS 服务分配静态 IP?

How can I assign a static IP to my EKS service?

我有一个 EKS 集群。

我创建了我的服务并使用 ingress-nginx 公开了它。

ingress-nginx 外部 IP 显示为 DNS 名称而不是 IP。

如何连接我的私有域以指向我的 EKS 服务?

我知道有关于将 AWS Elastic IP 与 Kubernetes 一起使用的注释,

但它仅从 Kubernetes 1.16 开始可用,而 EKS 最多只支持 1.14。

那么,我有哪些选项可以为我的服务分配一些静态 IP 并将我的 DNS 配置为指向该 IP?

您可以在 AWS 上配置弹性 IP 并使用该 IP 配置服务。

Ex:
type: LoadBalancer 
loadBalancerIP: xxxxx

这个 post 的答案在这种情况下仍然正确。

Amazon 进行负载平衡的方式是根据需要扩展和缩减接口以处理请求负载。这就是他们为您分配域名而不是 IP 地址的原因,因为您的负载均衡器可能有多个物理接口,并且 IP 地址会经常更改。

如果您要做的只是为您的负载均衡器创建一个 DNS 名称,这可以简单地通过任何 DNS 提供商来完成,方法是创建一个 CNAME 记录指向所配置的负载均衡器的 DNS 名称通过 AWS。如果您使用的是 Route53,则更简单,因为您只需创建一个带有 DNS 名称别名的 A 记录。

希望对您有所帮助。 FWIW,除非您仅将其部署在一个可用区中,否则无法为您的负载均衡器获取单个静态 IP 地址。

在创建 LoadBalancer 服务(这将创建一个实际的负载均衡器)时,您现在可以通过注释通过 id 指定预分配的弹性 IP。

示例:

apiVersion: v1
kind: Service
metadata:
  name: some-name
  annotations:
    # only network load balancer supports static IP
    service.beta.kubernetes.io/aws-load-balancer-type: nlb
    # comma-separated list of Elastic IP ids
    # the length of the list must be equal to the number of subnets
    service.beta.kubernetes.io/aws-load-balancer-eip-allocations: eipalloc-abcd0000,eipalloc-abcd0001,eipalloc-abcd0002
  ...
spec:
  type: LoadBalancer
  ...