Ingress Nginx -在GKE中设置静态IP地址

cld4siwp  于 2023-10-17  发布在  Nginx
关注(0)|答案(1)|浏览(210)

我使用ingress nginx(https://kubernetes.github.io/ingress-nginx/
这就是我如何在GKE中构建我的项目。
第一步:安装ingress控制器(https://kubernetes.github.io/ingress-nginx/deploy/#gce-gke)

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

步骤2:我使用skaffold dev来运行我的k8s文件。
下面是我的ingress-srv文件

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-srv
  annotations:
    ingressClassName: nginx
    nginx-ingress.kubernets.io/user-regex: 'true'
spec:
  rules:
    - host: ''
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: nix-api-clusterip-srv
                port:
                  number: 3020

之后,我可以在GKE中获得一个外部IP地址,但当我删除入口控制器并重复步骤1(再次安装入口控制器)时。我会得到一个新的外部IP地址。
即使我删除了入口控制器,我如何获得静态IP地址?
谢谢你

zwghvu4y

zwghvu4y1#

根据official documentation,即使Ingress控制器被删除并重新创建,也可以使用相同的静态IP。
通过在yaml文件中指定ingress.classannotation,确保Ingress只针对一个Ingress控制器。由于ingress NGINX控制器的示例实际上运行在集群中的节点上,因此默认情况下,如果云提供商支持静态IP分配给节点,则NGINX Ingress将仅获得静态IP。
获取ingress-nginx-controller的静态IP,可以使用Type=LoadBalancer的Service。
创建一个名为ingress-nginx-lb负载均衡服务,等待其获取IP。

$ kubectl create -f static-ip-svc.yaml
service "ingress-nginx-lb" created

$ kubectl get svc ingress-nginx-lb 
It will show the details as below:
NAME        ingress-nginx-lb
CLUSTER-IP      10.0.138.113
EXTERNAL-IP     104.154.109.191
PORT(S)         80:31457/TCP,443:32240/TCP
AGE             15m

完成后,更新Ingress控制器,使其通过传递**--Pullsh-service**标志来采用Service的静态IP。

$ kubectl create -f ingress-nginx-controller.yaml 
deployment "ingress-nginx-controller" created

每个使用ingress.classannotation设置为nginx创建的Ingress都将获得上一步中分配的IP

$ kubectl create -f ingress-nginx.yaml 
ingress "ingress-nginx" created

$ kubectl get ing ingress-nginx
It will show IP address for ingress-nginx as 104.154.109.191 (Same IP as Load balancer IP)

此外,您可以根据文档在Ingress资源上使用annotationkubernetes.io/ingress.regional-static-ip-name指定静态IP地址。
要将已分配的IP升级为静态IP,您可以按如下方式更新服务清单:

$ kubectl patch svc ingress-nginx-lb -p '{"spec": {"loadBalancerIP": "104.154.109.191"}}' 
"ingress-nginx-lb" patched

即使Ingress被删除并重新创建IP也会通过负载均衡器保留。由于所有请求都通过同一组NGINX控制器进行代理,因此所有Ingress之间共享相同的负载均衡器IP。您可以重新创建服务,并将spec.loadBalancerIP设置为104.154.109.191
或者,您也可以参考与静态IP预留相关的Google document

相关问题