GKE是否支持静态IP的nginx-ingress?

Joh*_*ohn 8 google-cloud-platform kubernetes google-kubernetes-engine kubernetes-ingress

我一直在使用Google Cloud入口.还部署了nginx-ingress并尝试在GKE中使用static-ip地址进行设置.

  • 我们可以在同一群集中同时使用Google Cloud ingress和nginx-ingress吗?
  • 我们如何使用static-ip的nginx-ingress?

谢谢

Ber*_*enz 10

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

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

gcloud compute addresses create my-static-ip-address --region us-east4
Run Code Online (Sandbox Code Playgroud)

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

helm install --name nginx-ingress stable/nginx-ingress --namespace my-namespace --set controller.service.loadBalancerIP=35.186.172.1
Run Code Online (Sandbox Code Playgroud)

  • 这个与 kubernetes 官方 git 示例(在该示例中将 `--publish-service=$(POD_NAMESPACE)/my-static-ip` 作为参数传递到 ingress-controller.yml 中)有何关系?https://github.com/kubernetes/ingress-nginx/tree/master/docs/examples/static-ip (2认同)

Gal*_*one 5

第一个问题

正如 Radek 'Goblin' Pieczonka 已经指出的那样,这是可能的。我只是想将您链接到有关此事的官方文档

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

metadata:
  name: foo
  annotations:
    kubernetes.io/ingress.class: "gce"
Run Code Online (Sandbox Code Playgroud)

将针对 GCE 控制器,强制 nginx 控制器忽略它,而像这样的注释

metadata:
  name: foo
  annotations:
    kubernetes.io/ingress.class: "nginx"
Run Code Online (Sandbox Code Playgroud)

第二个问题

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

考虑一下:

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

但是,当然您可以使用静态 IP 寻址您的入口资源, 有一个官方的分步指南向您展示如何使用入口资源创建 HTTP 负载平衡 Ingress 并将静态 IP 链接到它或如何将已在使用中的“临时”IP 提升为静态。

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


Rad*_*nka 0

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

kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: "nginx"
Run Code Online (Sandbox Code Playgroud)

这表明该入口预计由且仅由 nginx 入口控制器提供。

至于IP,Some cloud providers allow the loadBalancerIP to be specified.通过它你可以控制服务的公共IP。