将外部IP分配给Kubernetes节点(AWS EKS)

时间:2018-08-07 13:07:59

标签: amazon-web-services kubernetes amazon-eks

我有一个UDP服务,需要从AWS EKS群集公开到互联网。 AWS负载均衡器(经典负载均衡器或NLB负载均衡器)不执行UDP,因此我想将NodePort与Route53的多值一起使用,以实现对节点的UDP轮询负载均衡。

我在AWS EKS上的节点未分配ExternalIP。尽管运行节点的EC2实例具有公共IP,但在创建集群时并没有将其分配给节点。

如何为我的k8s节点分配EC2公共IP?

NAME                                          STATUS    ROLES     AGE       VERSION   EXTERNAL-IP   OS-IMAGE                                         KERNEL-VERSION               CONTAINER-RUNTIME
x.us-west-2.compute.internal   Ready     <none>    7d        v1.10.3   <none>        Amazon Linux 2 (2017.12) LTS Release Candidate   4.14.42-61.37.amzn2.x86_64   docker://17.6.2
x.us-west-2.compute.internal      Ready     <none>    7d        v1.10.3   <none>        Amazon Linux 2 (2017.12) LTS Release Candidate   4.14.42-61.37.amzn2.x86_64   docker://17.6.2
x.us-west-2.compute.internal   Ready     <none>    7d        v1.10.3   <none>        Amazon Linux 2 (2017.12) LTS Release Candidate   4.14.42-61.37.amzn2.x86_64   docker://17.6.2

为了方便起见,我目前正在针对HTTP服务进行测试,这是我的测试服务的外观:

apiVersion: v1
kind: Service
metadata:
  name: backend-api
  labels:
    app: backend-api
spec:
  selector:
    app: backend-api
  type: NodePort
  ports:
  - name: back-http
    port: 81
    targetPort: 8000
    protocol: TCP
  externalIPs:
  - x.x.x.x
  - x.x.x.x
  - x.x.x.x

在此示例中,我的curl请求从未命中节点上运行的HTTP服务。我的直觉是因为节点没有externalIP

1 个答案:

答案 0 :(得分:-1)

您可以使用External IP controller为节点分配IP。它可以在裸机集群上运行,但我认为它也可以在您的情况下运行。

  

外部IP控制器是一个k8s应用程序,部署在k8s集群的顶部,并在k8s辅助节点上配置外部IP,以提供IP连接。

     

说明:

     

外部IP控制器kubernetes应用程序正在以下其中一个运行   节点(副本数= 1)。

     
      
  • 启动时,它会从kube-api中获取有关服务的信息,并在指定的接口(在我们的eth0中,   上面的示例)。
  •   
  • 它通过外部IP监视kube-api中的服务更新:      
        
    • 出现新的外部IP时,它会显示出来。
    •   
    • 删除服务后,将从接口中删除相应的外部IP。
    •   
  •   
  • Kubernetes为外部IP控制器提供故障转移。由于我们已将副本设置为1,因此在一个   群集以避免IP重复。当k8s有问题时   节点,将在新的k8s worker节点上生成外部IP控制器   并在该节点上启用外部IP。
  •   

查看Demo,了解其工作原理。