【问题标题】:Does GKE support nginx-ingress with static ip?GKE 是否支持带有静态 ip 的 nginx-ingress?
【发布时间】:2018-07-23 15:30:13
【问题描述】:

我一直在使用 Google Cloud Load Balancer ingress。但是,我正在尝试在 GKE 中具有静态 IP 地址的节点中安装 nginxinc/kubernetes-ingress 控制器。

  1. 我可以在同一个集群中使用 Google 的 Cloud Load Balancer 入口控制器吗?
  2. 我们如何将nginxinc/kubernetes-ingress 与静态 IP 结合使用?

谢谢

【问题讨论】:

    标签: kubernetes google-cloud-platform google-kubernetes-engine kubernetes-ingress


    【解决方案1】:

    如果您使用 helm 部署 nginx-ingress。

    首先创建一个静态 IP 地址。在 google 中,网络负载均衡器 (NLB) 仅支持区域静态 IP:

    gcloud compute addresses create my-static-ip-address --region us-east4
    

    然后以 ip 地址作为 loadBalancerIP 参数安装 nginx-helm

    helm install --name nginx-ingress stable/nginx-ingress --namespace my-namespace --set controller.service.loadBalancerIP=35.186.172.1
    

    【讨论】:

    • 不错!如果您还需要保护您的 nginx,则此方法有效:添加 address_type = "INTERNAL" 并且您是金子
    • 这与你在 ingress-controller.yml 上传递 --publish-service=$(POD_NAMESPACE)/my-static-ip 作为 arg 的 kubernetes 官方 git 示例有何不同? github.com/kubernetes/ingress-nginx/tree/master/docs/examples/…
    • 这是一个很好的问题@AlxVallejo。您的链接提到使用“loadBalancerIP”将临时 IP 提升为静态 IP(“现在,即使服务被删除,IP 也会保留,因此您可以重新创建将 spec.loadBalancerIP 设置为 104.154.109.191 的服务”)。
    • 使用 helm 3,运行以下命令:helm repo add stable https://kubernetes-charts.storage.googleapis.com/helm install --name nginx-ingress stable/nginx-ingress --namespace leep --set controller.service.loadBalancerIP={static-id}
    【解决方案2】:

    第一个问题

    正如 Radek 'Goblin' Pieczonka 已经指出的那样,这样做是可能的。 关于此事,我只是想将您链接到official documentation

    如果您在单个集群中有多个 Ingress 控制器,您可以 通过指定 ingress.class 注释来选择一个,例如创建一个 带有注释的入口,如

    metadata:
      name: foo
      annotations:
        kubernetes.io/ingress.class: "gce"
    

    将针对 GCE 控制器,强制 nginx 控制器忽略 它,而像

    这样的注释
    metadata:
      name: foo
      annotations:
        kubernetes.io/ingress.class: "nginx"
    

    第二个问题

    由于您使用的是 Google Cloud Platform,我可以为您提供有关在 Google 中实现 Kubernetes 的更多详细信息。

    考虑一下:

    默认情况下,Kubernetes Engine 分配临时外部 IP 通过 Ingress 公开的 HTTP 应用程序的地址。

    不过,您当然可以为入口资源使用静态 IP 地址, there is an official step to step guide 向您展示如何使用 Ingress 资源创建 HTTP 负载平衡并将其链接到静态 IP,或者如何将已使用的“临时” IP 提升为静态。

    尝试通过它,如果您遇到一些问题,请更新问题并提出!

    【讨论】:

    • 太棒了,感谢详细的指点。我想我得到了第一个问题,我目前主要关心的是第二个问题。我尝试使用cloud.google.com/kubernetes-engine/docs/tutorials/…,它适用于 GKE 入口,但是当我尝试使用 nginx 时,它会获得一个临时 IP 地址。如果您可以为nginx-ingress 指出任何静态IP 引用,那就太好了。谢谢。
    • 您是否也尝试过遵循步骤 5 的选项 1?我没有测试它,但它应该可以工作,因为它也出现在本指南github.com/kubernetes/ingress-nginx/tree/master/docs/examples/…
    • @GalloCedrone 步骤 5 的选项 1 不是很有用,因为它不是声明性的。应该有一些方法来设置并忘记它。
    • 第二部分不是所要求的,问题是关于 nginx-ingress 的静态 IP,而不是 gce ingress。
    【解决方案3】:

    对于 nginx-ingress 控制器,您必须在服务上设置外部 IP:

    spec:
      loadBalancerIP: "42.42.42.42"
      externalTrafficPolicy: "Local"
    

    【讨论】:

    【解决方案4】:

    在 kubernetes 中运行多个入口控制器是非常好的,但它们需要知道它们应该实例化哪些 Ingress 对象。这是通过一个特殊的注释来完成的,比如:

    kind: Ingress
    metadata:
      annotations:
        kubernetes.io/ingress.class: "nginx"
    

    这表明这个入口预计将由 nginx 入口控制器提供,并且只能由 nginx 入口控制器提供。

    至于IP,Some cloud providers allow the loadBalancerIP to be specified.可以控制服务的公网IP。

    【讨论】:

    • 感谢您的指点。我想我已经在注释中使用了它。如果您能指出任何有关 nginx-ingress 定义静态 IP 的资源,那就太好了。
    • 定义 IP 的不是 nginx-ingress,这种支持完全超出了它的范围,这是通过 kubernetes 服务和支持 cloudprovider 管理 LB 配置来完成的
    • @Radek'Goblin'Pieczonka:你能提供一些链接吗,我正在尝试找到一种方法,当我通过 yaml 文件创建入口时为负载均衡器分配静态 IP ..跨度>
    • @John:你找到解决这个问题的方法了吗?如果是的话,你能告诉我吗,我也在尝试在我的用例中实现同样的目标
    猜你喜欢
    • 2021-02-01
    • 2019-01-13
    • 1970-01-01
    • 1970-01-01
    • 2019-08-16
    • 2017-05-18
    • 1970-01-01
    • 2019-04-13
    • 2021-11-05
    相关资源
    最近更新 更多