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?
带有 ingress-nginx 的 kubernetes 中的 Django 不提供静态文件
如何在 kubernetes 部署规范中从 ingress-nginx-controller 引用 EXTERNAL-IP?