【问题标题】:GKE Nginx Ingress - Assigning static ipGKE Nginx Ingress - 分配静态 ip
【发布时间】:2021-02-01 11:09:36
【问题描述】:

我在 GKE 集群中有一个入口控制器,ingress.class

kubernetes.io/ingress.class: "nginx"

我希望为这个入口控制器分配一个静态 IP。我按照本教程创建和分配静态 ip:

https://cloud.google.com/kubernetes-engine/docs/tutorials/configuring-domain-name-static-ip

基本上我保留了一个静态 IP 并尝试使用以下方法将其分配给入口:

kubernetes.io/ingress.global-static-ip-name: "my-ingress-static-ip"

问题

ip地址入口没有更改为新分配的静态ip。

我应该如何将此静态 IP 分配给入口?

我的配置

使用以下方式部署的控制器:

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.40.2/deploy/static/provider/cloud/deploy.yaml

我的入口 yaml:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: api-ingress
  namespace: development
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$1
    nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
    kubernetes.io/ingress.class: "nginx"
    # Disallow http - Allowed only with gce controller
    # kubernetes.io/ingress.allow-http: "false"
    # Enable client certificate authentication
    nginx.ingress.kubernetes.io/auth-tls-verify-client: "on"
    # Create the secret containing the trusted ca certificates
    nginx.ingress.kubernetes.io/auth-tls-secret: "development/api-ingress-ca-secret"
    # Specify the verification depth in the client certificates chain
    nginx.ingress.kubernetes.io/auth-tls-verify-depth: "1"
    # Automatically redirect http to https
    nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
    # Use regex in paths
    nginx.ingress.kubernetes.io/use-regex: "true"
    # For notifications we add the proxy headers
    nginx.ingress.kubernetes.io/configuration-snippet: |  
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection "upgrade";
    # Set a static ip for the ingress
    kubernetes.io/ingress.global-static-ip-name: "my-ingress-static-ip"
spec:
  tls:
    - hosts:
      - my-host.com
      secretName: api-tls-certificate
  rules:
  - host: my-host.com
    http:
      paths:
      - path: /(v[0-9]/.*)
        backend:
          serviceName: my-service
          servicePort: 443
      

删除入口或控制器并没有解决问题。

【问题讨论】:

    标签: kubernetes google-cloud-platform google-kubernetes-engine kubernetes-ingress nginx-ingress


    【解决方案1】:

    该教程仅适用于 GCE 入口控制器。

    注意:本教程不适用于 NGINX 入口控制器。

    要设置IP地址,需要在LoadBalancer服务的spec:section中指定实际的ip地址。

    spec:
      type: LoadBalancer
      externalTrafficPolicy: Local
      loadBalancerIP: ACTUAL.IP.ADRESS.HERE
      ports:
    

    请注意,请确保您的 IP 地址是区域静态 IP 而不是全局 IP。我花了很长时间才弄明白。

    【讨论】:

    • 谢谢,这很好用。使用 kubectl patch svc ingress-nginx-controller -p '{"spec": {"loadBalancerIP": "MY_STATIC_IP"}}' 修补现有的 nginx 控制器服务
    • 其实下面的,来自docs.nginx.com/nginx-ingress-controller/installation/… 让事情变得简单,所以我可以做到helm upgrade --install nginx-ingress ingress-nginx/ingress-nginx --namespace "$${K8S_NAMESPACE}" --set controller.service.externalTrafficPolicy=Local --set controller.service.loadBalancerIP=192.0.2.13
    • 我认为这里的“该教程仅适用于 GCE 入口控制器”。令人困惑,这实际上是针对 kubernetes.io/ingress.class: "nginx",而不是针对类 "gce"
    • 来自上面链接的教程cloud.google.com/kubernetes-engine/docs/tutorials/…“注意:本教程使用内置的GKE Ingress Controller,不适用于NGINX Ingress Controller。”
    猜你喜欢
    • 1970-01-01
    • 2019-01-13
    • 2018-07-23
    • 1970-01-01
    • 2019-08-16
    • 2017-05-18
    • 2019-04-13
    • 2021-11-05
    • 1970-01-01
    相关资源
    最近更新 更多