kubernetes-ingress - 使用 Nginx Ingress 在 GKE 上的静态全局 IP?
问题描述
我正在尝试在我的 GKE 集群中设置一个 nginx 入口控制器,并且我想使用静态全局 IP 地址,但我正在努力弄清楚如何使用它。
经过大量研究,大多数指南/stackoverflow/博客只是说“kubernetes.io/ingress.global-static-ip-name
在你的入口资源上使用注释”,但这并没有做任何事情。
下面是我的 Ingress 资源的示例
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: my-ingress
namespace: my-namespace
annotations:
kubernetes.io/tls-acme: "true"
kubernetes.io/ingress.class: "nginx"
kubernetes.io/ingress.allow-http: "false"
nginx.org/websocket-services: "ws-svc"
kubernetes.io/ingress.global-static-ip-name: my-global-gce-ip
spec:
tls:
- secretName: my-secret
hosts:
- mysite.com
rules:
- host: mysite.com
http:
paths:
- path: /
backend:
serviceName: web
servicePort: 80
该服务总是得到一个临时 IP 地址,每当我重新创建控制器时它就会被丢弃。我怀疑这里的问题是注释仅适用于 GCE 类型的 Ingress,而不适用于 nginx(即使这没有在任何地方说明)
接下来,我尝试在我的入口资源中手动设置 IP,如本指南中所示,但是当我查看创建的服务时,外部 IP 地址仅显示pending
一些 github 问题似乎指向的原因是因为它是一个全局且不是区域IP。
考虑到这一切,有没有办法使用nginx入口控制器在GKE集群上拥有静态全局IP ?
解决方案
您必须像loadBalancerIP
在 nginx 入口控制器中一样设置静态 IP,而不是在入口资源中(就像您所做的那样)。根据文档,负载均衡器 IP 是分配给负载均衡器的 IP 地址(如果支持)。
https://github.com/helm/charts/tree/master/stable/nginx-ingress
spec:
...
externalTrafficPolicy: Cluster
loadBalancerIP: [your static IP]
sessionAffinity: None
type: LoadBalancer
并确保您的 IP 是区域性的,而不是全球性的。只有 GCP 负载平衡器(GCP 内置入口控制器)支持全局 IP。
推荐阅读
- datetime - 飞镖日期时间.difference
- python - 如何在 FastAPI POST 请求中同时添加文件和 JSON 正文?
- google-chrome - Cookie 出现在 chrome 锁定图标菜单中,但未出现在 DevTools > Application Tab > Cookies 部分?
- c++ - 我如何使用 2 QTimer?一个用于计数,另一个用于显示
- python-3.x - opencv与skimage之间的HSV色彩空间转换
- vue.js - 如何检查用户是否在 vue 组件内处于全屏模式?
- python - 如何查找自多少天以来列的值为True?
- arrays - 找不到如何仅使用索引路径号来提取数组的一部分。(迅速)
- amazon-web-services - 为应用程序的不同用户分离 S3 访问
- javascript - .style.gridTemplateColumns 似乎不起作用