我的Kubernetes集群在Google Cloud下运行。我已经部署了使用端口443运行的部署,并且LoadBalancer将其暴露给了Internet。
我是以这种方式创建的:
kubectl expose deployment my-app --target-port=443 --port=443 --type=LoadBalancer
运行此命令后,负载均衡器将指向my-app
部署。现在,我创建了my-app2
,我想更改负载均衡器以指向新的部署(my-app2
)。
注意:删除并重新创建部署正在释放外部IP地址,我想避免使用它。
如何修补现有服务以指向另外一个部署,而又不会失去外部IP?
答案 0 :(得分:2)
这在GKE here的教程中已介绍。
首先,您应该保留一个静态IP地址,以便在部署之间重复使用。
您可以在GCP控制台中或通过命令执行此操作,如下所示:
gcloud compute addresses create helloweb-ip --region us-central1
然后,您可以找到已分配的静态IP地址:
gcloud compute addresses describe helloweb-ip --region us-central1
然后,在设置LoadBalancer
服务时应使用此IP地址。在“命令式”命令中,您将输入:
kubectl expose deployment my-app --target-port=443 --port=443 --type=LoadBalancer --loadBalancerIP=YOUR.IP.ADDRESS.HERE
随着设置变得越来越复杂,YAML的“声明性”表格非常方便,也可以保存下来以备将来使用。例如:
apiVersion: v1
kind: Service
metadata:
name: helloweb
labels:
app: hello
spec:
selector:
app: hello
tier: web
ports:
- port: 80
targetPort: 8080
type: LoadBalancer
loadBalancerIP: "YOUR.IP.ADDRESS.HERE"
答案 1 :(得分:2)
是的,您可以使用现有的服务来指向新的部署。
您需要做的就是使用新部署的服务标签来编辑服务YAML。
假设您已按如下所示新部署了服务Yaml。
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: my-app-2
spec:
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 80
它的标签为
template:
metadata:
labels:
app: my-app-2
如果您的服务如下:
kind: Service
apiVersion: v1
metadata:
name: my-app
spec:
type: LoadBalancer
selector:
app: my-app
ports:
- protocol: TCP
port: 80
targetPort: 80
您只需要更改服务的选择器部分
selector:
app: my-app
到
selector:
app: my-app-2
答案 2 :(得分:2)
最后,找到了解决方法:
kubectl patch service old-app -p '{"spec":{"selector":{"app": "new-app"}}}'