Kubernetes:如何使用补丁更改服务端口

Kubernetes:如何使用补丁更改服务端口,kubernetes,kubectl,Kubernetes,Kubectl,让我们进行以下服务: serivce1.yml apiVersion: v1 kind: Service metadata: name: service1 spec: type: ClusterIP ports: - port: 90 name: port0 targetPort: 40000 selector: app: nginx 我申请如下:kubectl申请-f service1.yml 现在我想更改端口部分。我可以编辑yml并再次应用

让我们进行以下服务:

serivce1.yml
apiVersion: v1
kind: Service
metadata:
  name: service1
spec:
  type: ClusterIP
  ports:
   - port: 90
     name: port0
     targetPort: 40000
  selector:
    app: nginx
我申请如下:kubectl申请-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>
$kubectl描述svc服务1
姓名:service1
名称空间:abdelghani
标签:
注释:
选择器:app=nginx
类型:集群
知识产权家庭:
IP:10.98.186.21
IPs:
端口:另一个端口SPEC 80/TCP
目标端口:80/TCP
终点:10.39.0.3:80
端口:端口0 90/TCP
目标端口:40000/TCP
终点:10.39.0.3:40000
会话关联:无
活动:
我的问题: 是否可以通过将旧部分替换为作为参数传递的部分来更改端口部分

Thx

正如我们(与@Abdelghani)讨论的,问题在于补丁策略。使用以下命令:

$kubectl patch svc service1--type merge-p'{“spec”:{“ports”:[{“port”:80,“name”:“anotherportspec”}]}}解决了这个问题

标志
--类型merge
将启用替换现有值

阅读更多:

作为修补的备选方案,您有两个选项:

1。使用
kubectl Edit
命令编辑您的服务: 在提示符
$kubectl edit svc-n中

粘贴正确的端口并保存文件

2.您还可以手动编辑服务配置文件:

vi your-service.yaml
更新端口号并应用更改

$ kubectl apply -f your-service.yaml

如果传递的是
port0
,而不是
另一个portspec
,会发生什么情况?是不是抛出了一个错误?是的。它引发错误:服务“service1”无效:spec.ports[1]。名称:重复值:“port0”看起来像是问题的重复项,可能在修补程序策略中-。您是否可以尝试使用kubectl edit svc(i插入属性端口ESC:wq保存更改)作为替代方法?编辑服务YAML文件(并将其提交到源代码管理)对我来说似乎是一种更好、更简单的方法?
$ kubectl apply -f your-service.yaml