使用Nginx Ingress在GKE上使用静态全局IP?

Ale*_*rio 4 static-ip-address google-kubernetes-engine kubernetes-ingress

我正在尝试在我的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
Run Code Online (Sandbox Code Playgroud)

该服务始终获得一个临时IP地址,每当我重新创建控制器时,该IP地址都会被丢弃。我怀疑这里的问题是注解仅适用于GCE类型的Ingress,而不适用于nginx(即使未在任何地方说明)

接下来,我尝试按照本指南中的说明在我的入口资源中手动设置IP,但是当我查看创建的服务时,外部IP地址仅显示了pending某些github问题似乎是由于它是全局的,不是区域性IP。

考虑到所有这些,是否有任何方法可以使用Nginx入口控制器在GKE群集上具有静态全局 IP ?

Jaw*_*har 5

您必须像loadBalancerIP在nginx入口控制器中一样设置静态IP ,而不是像在入口资源中那样设置静态IP 。根据文档,负载均衡器IP是分配给负载均衡器的IP地址(如果支持)。

https://github.com/helm/charts/tree/master/stable/nginx-ingress

 spec:
  ...
  externalTrafficPolicy: Cluster
  loadBalancerIP: [your static IP]
  sessionAffinity: None
  type: LoadBalancer
Run Code Online (Sandbox Code Playgroud)

并确保您的IP是区域性的,而不是全球性的。仅GCP负载平衡器(GCP内置入口控制器)支持全局IP。