【问题标题】:How to setup static LoadBalancer IP for a service in OCI kubernetes cluster?如何为 OCI Kubernetes 集群中的服务设置静态 LoadBalancer IP?
【发布时间】:2021-06-19 02:14:10
【问题描述】:

我在 Oracle 云中有一个 3 节点 OKE 集群设置。

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

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

所以如果我能在安装 nginx 入口控制器时指定一个静态 loadBalancer IP 会更好。像这样:

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

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

【问题讨论】:

  • ExternalDNS 对您有帮助吗? github.com/kubernetes-sigs/external-dns#externaldns ExternalDNS 允许您通过 Kubernetes 资源动态控制 DNS 记录。从它的文档中我看到它支持 Oracle 云基础设施 DNS。这将帮助您不依赖静态 External_IP 并通过监控您的 Service Annotations 和/或 Ingress Host 自动创建/删除 DNS 记录
  • @rock'nrolla 但它似乎不支持我的服务提供商。对于oracle,我需要的是这样的东西:docs.microsoft.com/en-us/azure/aks/…(这是在天蓝色的云中)。
  • 我可能没有直截了当地思考,但是如果您在 nginx 控制器服务的loadBalancerIP 中使用预先保留的 IP(如 AWS 中的 ElasticIP)会发生什么——就像您提到的那样。我看到 nginx ingress helm chart 允许这样做:github.com/helm/charts/blob/master/stable/nginx-ingress/… 创建的 LB 是否不使用此 IP?
  • @rock'nrolla 我尝试为示例服务设置loadBalancerIP。但是外部IP 仍然是<pending>。并且出现错误Error syncing load balancer: failed to ensure load balancer: invalid service: OCI does not support setting LoadBalancerIP。那就是说不可能?

标签: oracle kubernetes service static static-ip-address


【解决方案1】:

Oracle 云基础设施(OCI)支持在 kubernetes 集群中创建LoadBalancer 服务,并且还允许设置LoadBalancerIP 参数。

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

你可以这样做:

  • 转到 OCI 控制台:
    Networking -> IP management -> Reserved Public IPs.
    点击Reserve Public IP Address
    提供一个名称,然后选择源 Oracle(如果这是您拥有的唯一公共 IP 池)(默认)。
    单击“保留”按钮以获取保留的公共 IP 地址。

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

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

  • 查看kubectl get svc,可以看到为服务分配了预留的公网IP地址。

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

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

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

这些文档对此主题进行了解释:

【讨论】:

    【解决方案2】:

    请确保您使用 helm chart https://kubernetes.github.io/ingress-nginx/deploy/#using-helm 安装 nginx 入口控制器

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

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

    这就是 OpenShift 路由器的工作方式。

    【讨论】:

    猜你喜欢
    • 2021-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-22
    • 1970-01-01
    • 2021-04-12
    • 2020-04-23
    相关资源
    最近更新 更多