![](/img/trans.png)
[英]Fixed IP address for Kubernetes worker node managed by AWS EKS
[英]Assign external IP to Kubernetes nodes (AWS EKS)
我有一个 UDP 服务,我需要从 AWS EKS 集群向 Internet 公开。 AWS负载均衡器(经典或NLB)不做UDP,所以我想用一个NodePort
与Route53的多值获得UDP循环赛负载平衡,以我的节点。
我在 AWS EKS 上的节点没有分配给它们的ExternalIP
。 虽然运行节点的 EC2 实例具有公共 IP,但在创建集群时尚未将这些 IP 分配给节点。
如何将 EC2 公共 IP 分配给我的 k8s 节点?
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
。
我还没有尝试过 HostPort 或 UDP,但我在公共 NodePorts 上取得了成功。
只要实例具有公共 IP,其安全策略会打开端口,没有操作系统防火墙,并且您没有不兼容的 NetworkPolicies,那么 HostPort 就可以正常工作。 NodePort 将操作系统的端口转发到 Kubernetes。 ExternalIP 和其他内部 Kubernetes 设置无关紧要。
您可以使用外部IP控制器为节点分配IP。 它设计用于裸机群集,但我认为它也适用于您的情况。
外部IP控制器是一个k8s应用程序,它部署在k8s集群之上,它在k8s工作节点上配置外部IP以提供IP连接。
描述:
外部IP控制器kubernetes应用程序正在其中一个节点上运行(副本= 1)。
- 在开始时,它从kube-api中提取有关服务的信息,并在指定的接口上显示所有外部IP(在上面的示例中为eth0)。
- 它通过外部IP监视kube-api的服务更新,并且:
- 当出现新的外部IP时,它会启动它们。
- 删除服务后,它会从界面中删除相应的外部IP。
- Kubernetes为外部IP控制器提供故障转移。 由于我们将副本设置为1,因此我们将只在群集中运行一个实例以避免IP重复。 当k8s节点出现问题时,将在新的k8s工作节点上生成外部IP控制器,并在该节点上启动外部IP。
查看演示以了解它是如何工作的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.