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