我使用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地址?
谢谢你
1条答案
按热度按时间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。
完成后,更新Ingress控制器,使其通过传递**--Pullsh-service**标志来采用Service的静态IP。
每个使用ingress.classannotation设置为nginx创建的Ingress都将获得上一步中分配的IP
此外,您可以根据文档在Ingress资源上使用annotation
kubernetes.io/ingress.regional-static-ip-name
指定静态IP地址。要将已分配的IP升级为静态IP,您可以按如下方式更新服务清单:
即使Ingress被删除并重新创建,IP也会通过负载均衡器保留。由于所有请求都通过同一组NGINX控制器进行代理,因此所有Ingress之间共享相同的负载均衡器IP。您可以重新创建服务,并将spec.loadBalancerIP设置为104.154.109.191
或者,您也可以参考与静态IP预留相关的Google document。