我正在尝试在我的GKE集群中设置一个nginx入口控制器,我想使用一个静态的全局IP地址,但是我正在努力弄清楚如何实现。
经过大量研究,大多数指南/ stackoverflow / blog都只说“在入口资源上使用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地址,每当我重新创建控制器时,该IP地址都会被丢弃。 我怀疑这里存在的问题是注释仅适用于GCE类型的Ingress,而不适用于nginx(即使没有在此说明)
接下来,我尝试手动在guide中所示的入口资源中设置IP,但是当我查看创建的服务时,外部IP地址仅显示为pending
,这似乎是一些github问题。关键是因为它是全球性的而不是区域性的知识产权。
考虑到所有这些,是否可以使用 nginx 入口控制器在 GKE 集群上具有静态 global IP?
答案 0 :(得分:3)
您必须在nginx入口控制器中(而不是在入口资源中)将静态IP设置为loadBalancerIP
(就像您所做的那样)。根据文档,负载均衡器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。