如何为 OCI kubernetes 集群中的服务设置静态 LoadBalancer IP?

How to setup static LoadBalancer IP for a service in OCI kubernetes cluster?

我在 Oracle 云中设置了 3 节点 OKE 集群。

我在集群中部署了一个nginx ingress controller。 我正在将 FQDN test.myapp.com 映射到该 nginx 入口控制器服务的 EXTERNAL_IP。

每当我在测试期间重新安装入口控制器时,它都会变得不同 EXTERNAL_IP,我必须再次将 FQDN 映射到那个新 IP。

所以如果能在安装nginx ingress controller的时候指定一个静态的loadBalancer IP就更好了。像这样:

nginx-ingress:
  controller:
    service:
      loadBalancerIP: "125.23.119.23"

如何在 Oracle 云中(使用 OKE)实现这一点?

请确保使用 helm chart 安装 nginx ingress controller https://kubernetes.github.io/ingress-nginx/deploy/#using-helm

请使用 helm 图表值确保您的 Ingress Controller 仅在 Openshift 集群的 Infra 节点上作为 DaemonSet 运行。

然后创建一个 Oracle Cloud Load Balancer 以指向 Ingress Controller Service 正在侦听的 Infra 节点的 NodePort。

这就是 OpenShift Router 的工作方式。

Oracle Cloud Infrastructure(OCI) 支持在 kubernetes 集群中创建 LoadBalancer 服务,并允许设置 LoadBalancerIP 参数。

但首先,您必须在 OCI 中创建一个 保留 Public IP 地址,然后将该 IP 地址指定为您服务的 LoadBalancerIP

您可以这样做:

  • 转到 OCI 控制台:
    Networking -> IP management -> Reserved Public IPs.
    点击 Reserve Public IP Address
    提供名称和 select 来源 Oracle 如果这是您唯一的 public IP 池(默认)。
    单击保留按钮获取保留的 public IP 地址。

  • 在 OCI 控制台中,查看:
    Networking -> IP management -> Reserved Public IPs
    (您可以在那里看到 Reserved Public IP,但未附加到任何 VNIC)
    Networking -> Load Balancers
    (我们保留的 IP 地址未列出负载均衡器)

  • 使用 kubectl 在 kubernetes 集群中创建一个 LoadBalancer 类型的服务,其中 LoadbalancerIP 提供我们保留的 IP 地址的值。

  • 检查kubectl get svc,您可以看到保留的Public IP 地址已分配给该服务。

  • 在 OCI 控制台中,查看:
    Networking -> IP management -> Reserved Public IPs
    (您可以看到保留的 public IP 地址,附加到 LB 的 VNIC)
    Networking -> Load Balancers
    (使用我们保留的 IP 地址自动添加第 4 层负载均衡器)

这意味着,当您创建 Reserved Public IP 时,您只是将其保留以备将来使用。仅当使用此保留 IP 地址创建 LoadBalancer 类型服务时,才会创建第 4 层负载平衡器并将其与该 IP 地址相关联。

如果您删除该 LoadBalancer 类型的服务,则第 4 层负载均衡器也会被删除。但是 Reserved public IP 仍然保留在那里。下次您可以将该 IP 地址分配给其他服务。

这些文档对此主题有解释: