我有一个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
。
答案 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,了解其工作原理。