Kubernetes:如何使用补丁更改服务端口
Kubernetes : How to change service ports using patch
假设为以下服务:
serivce1.yml
apiVersion: v1
kind: Service
metadata:
name: service1
spec:
type: ClusterIP
ports:
- port: 90
name: port0
targetPort: 40000
selector:
app: nginx
我申请如下:kubectl apply -f service1.yml
现在我想更改端口部分。我可以编辑 yml 并再次应用,但我更喜欢使用补丁 :
kubectl patch service service1 -p '{"spec":{"ports": [{"port": 80,"name":"anotherportspec"}]}}'
service/service1 patched
但是此命令添加了一个新端口并保留了旧端口:
$ kubectl describe svc service1
Name: service1
Namespace: abdelghani
Labels: <none>
Annotations: <none>
Selector: app=nginx
Type: ClusterIP
IP Families: <none>
IP: 10.98.186.21
IPs: <none>
Port: anotherportspec 80/TCP
TargetPort: 80/TCP
Endpoints: 10.39.0.3:80
Port: port0 90/TCP
TargetPort: 40000/TCP
Endpoints: 10.39.0.3:40000
Session Affinity: None
Events: <none>
我的问题:
是否可以通过将旧部分替换为作为参数传递的部分来更改端口部分?
感谢
正如我们(与@Abdelghani)讨论的那样,问题出在补丁策略中。使用以下命令:
$ kubectl patch svc service1 --type merge -p '{"spec":{"ports": [{"port": 80,"name":"anotherportspec"}]}}'
解决问题。
标志 --type merge
将启用替换现有值。
阅读更多:kubectl-patch.
作为修补的替代方案,您有几个选择:
1. 使用 kubectl edit
命令编辑您的服务:
在提示 $ kubectl edit svc <service_name> -n <namespace>
i - to edit the service
ESC, :wq - update your service
粘贴正确的端口并保存文件。
2. 您也可以手动编辑服务配置文件:
vi your-service.yaml
更新端口号并应用更改
$ kubectl apply -f your-service.yaml
假设为以下服务:
serivce1.yml
apiVersion: v1
kind: Service
metadata:
name: service1
spec:
type: ClusterIP
ports:
- port: 90
name: port0
targetPort: 40000
selector:
app: nginx
我申请如下:kubectl apply -f service1.yml
现在我想更改端口部分。我可以编辑 yml 并再次应用,但我更喜欢使用补丁 :
kubectl patch service service1 -p '{"spec":{"ports": [{"port": 80,"name":"anotherportspec"}]}}'
service/service1 patched
但是此命令添加了一个新端口并保留了旧端口:
$ kubectl describe svc service1
Name: service1
Namespace: abdelghani
Labels: <none>
Annotations: <none>
Selector: app=nginx
Type: ClusterIP
IP Families: <none>
IP: 10.98.186.21
IPs: <none>
Port: anotherportspec 80/TCP
TargetPort: 80/TCP
Endpoints: 10.39.0.3:80
Port: port0 90/TCP
TargetPort: 40000/TCP
Endpoints: 10.39.0.3:40000
Session Affinity: None
Events: <none>
我的问题: 是否可以通过将旧部分替换为作为参数传递的部分来更改端口部分?
感谢
正如我们(与@Abdelghani)讨论的那样,问题出在补丁策略中。使用以下命令:
$ kubectl patch svc service1 --type merge -p '{"spec":{"ports": [{"port": 80,"name":"anotherportspec"}]}}'
解决问题。
标志 --type merge
将启用替换现有值。
阅读更多:kubectl-patch.
作为修补的替代方案,您有几个选择:
1. 使用 kubectl edit
命令编辑您的服务:
在提示 $ kubectl edit svc <service_name> -n <namespace>
i - to edit the service
ESC, :wq - update your service
粘贴正确的端口并保存文件。
2. 您也可以手动编辑服务配置文件:
vi your-service.yaml
更新端口号并应用更改
$ kubectl apply -f your-service.yaml