5

我有一个 UDP 服务,我需要从 AWS EKS 集群向 Internet 公开。AWS 负载均衡器(经典或 NLB)不做 UDP,所以我想使用NodePortRoute53 的多值来让 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 服务。我的预感是因为节点没有externalIPs。

4

2 回答 2

0

我没有尝试过 HostPort 或 UDP,但我在公共 NodePorts 上取得了成功。

只要实例有一个公共 IP,它的安全策略打开端口,没有操作系统防火墙,并且您没有不兼容的 NetworkPolicies,那么 HostPort 就可以工作。NodePort 将操作系统的端口转发到 Kubernetes。ExternalIP 和其他内部 Kubernetes 设置无关紧要。

于 2021-12-22T11:34:36.697 回答
-1

您可以使用外部 IP 控制器为节点分配 IP。它设计用于裸机集群,但我认为它也应该适用于您的情况。

外部 IP 控制器是一个部署在 k8s 集群之上的 k8s 应用程序,它在 k8s 工作节点上配置外部 IP 以提供 IP 连接。

描述:

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

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

查看演示以了解它是如何工作的。

于 2018-08-08T13:52:40.570 回答