将外部IP分配给节点

Kin*_*ngJ 6 kubernetes

我正在运行一个裸机Kubernetes集群,并尝试使用负载均衡器公开我的服务。我通常知道负载均衡器是底层公共云的功能,但是随着最近对Ingress Controllers的支持,似乎现在应该可以将nginx用作自托管负载均衡器了。

到目前为止,我一直在遵循此处的示例来设置nginx Ingress Controller及其背后的一些测试服务。但是,我无法执行步骤6,该步骤显示了负载均衡器所运行的节点的外部IP,因为我的节点在地址部分中没有外部IP,只有LegacyHostIP和InternalIP。

我尝试通过在服务的规范中指定将IP手动分配给群集。但是,这似乎被映射为externalID。

如何手动设置节点的ExternalIP地址?

iam*_*nat 6

这是经过测试并适用于在特定节点上创建的 nginx 服务的东西。

apiVersion: v1
kind: Service
metadata:
    name: nginx
    namespace: default
spec:
    ports:
    -   port: 80
        protocol: TCP
        targetPort: 80
        name: http
    -   port: 443
        protocol: TCP
        targetPort: 443
        name: https
    externalIPs:
      - '{{external_ip}}'
    selector:
        app: nginx
Run Code Online (Sandbox Code Playgroud)

假设 nginx 部署上游侦听端口 80、443。 externalIP 是节点的公共 IP。

  • 经过更多的挖掘,我发现外部和内部 IP 是由 Kubernetes 运行的特定云决定的。支持因云而异,例如 [https://github.com/kubernetes/kubernetes/blob/master/pkg/cloudprovider/providers/gce/gce.go](这里是 Google Compute Engine 的一个)(搜索ExternalIP 以查看它从何处获取数据)。由于它依赖于单个云提供商,因此支持似乎变化很大。 (2认同)

小智 6

我建议查看 MetalLB: https: //github.com/google/metalb

它允许使用 ARP 或 BGP 在裸机集群中使用外部 IP 地址。它对我们来说非常有效,让您可以像在云中一样简单地请求 LoadBalancer 服务。