在 GKE 上更改我的 LoadBalancer 的 IP 地址
Posted
技术标签:
【中文标题】在 GKE 上更改我的 LoadBalancer 的 IP 地址【英文标题】:Change the IP address of my LoadBalancer on GKE 【发布时间】:2021-01-10 10:06:21 【问题描述】:我想在 Google Cloud 中更改我的 LoadBalancer ingress-nginx-controller 的 IP 地址。我现在已经通过 LoadBalancer 分配了 IP 地址。请参阅屏幕截图。不幸的是,它没有在 GKE 中采用。为什么?那是一个错误吗? GKE lb IP address change
【问题讨论】:
您是否在 Google Cloud 中保留了 IP 地址并将其包含在 Ingress 中?你是什么配置?你能分享一些环境信息吗?什么gke版本,你是怎么部署nginx的,你是怎么在GCP里预留全局IP的? 是的,我已经通过 *** 网络菜单项保留了一个 IP 地址。 IP没有分配到任何地方。我使用 kubectl apply -f raw.githubusercontent.com/kubernetes/ingress-nginx/… 创建了我的 ingress-nginx-controller 【参考方案1】:我已经在我的 GKE
测试集群上验证了这一点。
当您 Reserving a static external IP address 时,它不会分配给您的任何虚拟机。取决于您如何created cluster
/reserved ip
(标准或高级),您可能会收到如下错误:
Error syncing load balancer: failed to ensure load balancer: failed to create forwarding rule for load balancer (a574130f333b143a2a62281ef47c8dbb(default/nginx-ingress-controller)): googleapi: Error 400: PREMIUM network tier (the project's default network tier) is not supported: The network tier of specified IP address is STANDARD, that of Forwarding Rule must be the same., badRequest
在这种情况下,我使用了基于us-central-1c
和reserved IP
的集群作为Network Service Tier: Premium
、Type: Regional
并使用了我的集群所在的区域-us-central-1.
我的ExternalIP: 34.66.79.1X8
注意 Reserved IP must be in the same reagion as your cluster
选项 1: - 使用 Helm chart
部署 Nginx
helm install nginx-ingress stable/nginx-ingress --set controller.service.loadBalancerIP=34.66.79.1X8,rbac.create=true
服务输出:
$ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.8.0.1 <none> 443/TCP 5h49m
nginx-ingress-controller LoadBalancer 10.8.5.158 <pending> 80:31898/TCP,443:30554/TCP 27s
nginx-ingress-default-backend ClusterIP 10.8.13.209 <none> 80/TCP 27s
服务描述输出:
$ kubectl describe svc nginx-ingress-controller
...
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal EnsuringLoadBalancer 32s service-controller Ensuring load balancer
Normal EnsuredLoadBalancer 5s service-controller Ensured load balancer
最终输出:
$ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.8.0.1 <none> 443/TCP 5h49m
nginx-ingress-controller LoadBalancer 10.8.5.158 34.66.79.1X8 80:31898/TCP,443:30554/TCP 35s
nginx-ingress-default-backend ClusterIP 10.8.13.209 <none> 80/TCP 35s
选项 2 - 在部署 Nginx 之前编辑 Nginx YAML
根据文档: 使用以下命令将您的用户初始化为集群管理员:
kubectl create clusterrolebinding cluster-admin-binding \
--clusterrole cluster-admin \
--user $(gcloud config get-value account)
下载 YAML
$ wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.35.0/deploy/static/provider/cloud/deploy.yaml
编辑LoadBalancer
服务并添加loadBalancerIP: <your-reserved-ip>
,如下所示:
# Source: ingress-nginx/templates/controller-service.yaml
apiVersion: v1
kind: Service
metadata:
labels:
helm.sh/chart: ingress-nginx-2.13.0
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/instance: ingress-nginx
app.kubernetes.io/version: 0.35.0
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/component: controller
name: ingress-nginx-controller
namespace: ingress-nginx
spec:
type: LoadBalancer
loadBalancerIP: 34.66.79.1x8 #This line
externalTrafficPolicy: Local
ports:
部署它kubectl apply -f deploy.yaml
。服务输出如下:
$ kubectl get svc -A
NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
default kubernetes ClusterIP 10.8.0.1 <none> 443/TCP 6h6m
ingress-nginx ingress-nginx-controller LoadBalancer 10.8.5.165 <pending> 80:31226/TCP,443:31161/TCP 17s
ingress-nginx ingress-nginx-controller-admission ClusterIP 10.8.9.216 <none> 443/TCP 18s
6h6m
...
描述输出:
$ kubectl describe svc ingress-nginx-controller -n ingress-nginx
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal EnsuringLoadBalancer 40s service-controller Ensuring load balancer
Normal EnsuredLoadBalancer 2s service-controller Ensured load balancer
保留 IP 的服务:
$ kubectl get svc -n ingress-nginx
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ingress-nginx-controller LoadBalancer 10.8.5.165 34.66.79.1X8 80:31226/TCP,443:31161/TCP 2m22s
ingress-nginx-controller-admission ClusterIP 10.8.9.216 <none> 443/TCP 2m23s
另外
另外请记住,当您希望强制 GKE
使用 Nginx Ingress
功能(如 rewrite)时,应在 ingress
资源中添加 annotations: kubernetes.io/ingress.class: nginx
。
【讨论】:
以上是关于在 GKE 上更改我的 LoadBalancer 的 IP 地址的主要内容,如果未能解决你的问题,请参考以下文章
使用 GKE Istio Addon 时如何更改 istio-ingressgateway?