NGINX Ingress 上的全局静态 IP 名称

Posted

技术标签:

【中文标题】NGINX Ingress 上的全局静态 IP 名称【英文标题】:Global static IP name on NGINX Ingress 【发布时间】:2017-05-18 11:52:07 【问题描述】:

我无法让我的 Ingress 控制器在 Google Container Engine 上运行。我想使用带有基本身份验证的 nginx 入口控制器并使用保留的全局静态 IP 名称(这可以在 Google Cloud 管理界面的外部 IP 地址部分中进行)。当我使用 gce 类时,除了基本身份验证(我认为 gce 类不支持)之外,一切正常,当我尝试使用入口控制器启动的 nginx 类时输入代码,但我保留的 IP 地址在Google Cloud Admin 界面不会附加到 Ingress Controller。有谁知道如何让这个工作?这是我的配置文件:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: webserver
  annotations:
    kubernetes.io/ingress.global-static-ip-name: "myreservedipname"
    kubernetes.io/ingress.class: "nginx"
    ingress.kubernetes.io/auth-type: basic
    ingress.kubernetes.io/auth-realm: "Auth required"
    ingress.kubernetes.io/auth-secret: htpasswd
spec:
  tls:
    - secretName: tls
  backend:
    serviceName: webserver
    servicePort: 80

【问题讨论】:

我想你可能想看看这个:***.com/a/40164860/102133 gcloud ingress loadbalancer / static ip的可能重复 链接中的答案无法正常工作。现在无法下载图像。我也试过this link,但没有成功。 Sheesh,一年多以前,仍然没有答案! 【参考方案1】:

我找到了 helm 的解决方案。

helm install --name nginx-ingress stable/nginx-ingress \
      --set controller.service.loadBalancerIP=<YOUR_EXTERNAL_IP>

您应该使用external-ip,而不是您在 gcloud 中提供的名称。

另外,就我而言,我还添加了--set rbac.create=true 以获得权​​限。

【讨论】:

作为对我的回答的评论,这似乎是@Anton_Kostenko 代码的类似 helm 代码。但是,由于某种原因,当时他的回答对我不起作用,如果您想直接使用 kubernetes yaml 文件,可能不适用于您。【参考方案2】:

外部 IP 地址可以附加到负载均衡器,您可以将其指向您的 Ingress 控制器。

一个重要说明 - 外部 IP 地址应保留在 the same region 作为 Kubernetes 集群。

为此,您只需使用type: LoadBalancer 部署您的Nginx-ingress 服务并设置ExternalIP 值,如下所示:

kind: Service
apiVersion: v1
metadata:
  name: ingress-nginx
  namespace: ingress-nginx
  labels:
    app: ingress-nginx
spec:
  loadBalancerIP: <YOUR_EXTERNAL_IP>
  type: LoadBalancer
  selector:
    app: ingress-nginx
  ports:
  - name: http
    port: 80
    targetPort: http
  - name: https
    port: 443
    targetPort: https

部署后,Kubernetes 将创建一个具有所需静态 IP 的新负载均衡器,这将是您的 Ingress 的入口点。

@silgon,正如我所见,您已经尝试过这样做,但没有得到积极的结果。但是,它应该工作。如果不是,请再次检查 IP 地址和配置的区域。

【讨论】:

我会在星期一再次检查它,我会告诉你发生了什么,我可能错过了一些东西。谢谢。 还找到了相关文档:kubernetes.github.io/ingress-nginx/examples/static-ip/README 感谢您的回答。我最终使用了 helm 对​​我来说效果很好。在我测试您的实现时,它不起作用。我不知道为什么,因为正如你所说,语法似乎是正确的。【参考方案3】:

这是一个我知道可行的示例,可能是您的语法问题:

kind: Ingress
metadata:
name: nginx
spec:
rules:
- host: nginx.192.168.99.100.nip.io
http:
paths:
- backend:
serviceName: nginx
servicePort: 80

【讨论】:

以上是关于NGINX Ingress 上的全局静态 IP 名称的主要内容,如果未能解决你的问题,请参考以下文章

GKE 是不是支持带有静态 ip 的 nginx-ingress?

Kubernetes Ingress-nginx高级用法

Kubernetes Ingress-nginx高级用法

带有 ingress-nginx 的 kubernetes 中的 Django 不提供静态文件

Nginx Ingress TCP代理实现

如何在 kubernetes 部署规范中从 ingress-nginx-controller 引用 EXTERNAL-IP?