GKE 是不是支持带有静态 ip 的 nginx-ingress?
Posted
技术标签:
【中文标题】GKE 是不是支持带有静态 ip 的 nginx-ingress?【英文标题】: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
控制器。
-
我可以在同一个集群中使用 Google 的 Cloud Load Balancer 入口控制器吗?
我们如何将
nginxinc/kubernetes-ingress
与静态 IP 结合使用?
谢谢
【问题讨论】:
【参考方案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"
【讨论】:
我没有检查过nginx-ingress
,这就是我要找的。让我检查它是否有效。非常感谢您的快速回复。如果你能在这方面提供一些参考,那就太好了。
这里有一些提示:github.com/kubernetes/ingress-nginx/blob/master/docs/examples/…kubernetes.io/docs/reference/generated/kubernetes-api/v1.9/…
“本地”设置的原因是什么?【参考方案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:你找到解决这个问题的方法了吗?如果是的话,你能告诉我吗,我也在尝试在我的用例中实现同样的目标以上是关于GKE 是不是支持带有静态 ip 的 nginx-ingress?的主要内容,如果未能解决你的问题,请参考以下文章
在 GKE 上更改我的 LoadBalancer 的 IP 地址
Docker 构建失败 - 带有 GKE 的 Gitlab CI。无法通过 tcp://localhost:2375 连接到 Docker 守护程序。 docker 守护进程是不是正在运行?