设置如下服务:
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
现在我想更改ports部分。我可以编辑yml并再次应用,但我更喜欢使用patch:
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>
我的问题:是否有可能通过将旧部分替换为作为参数传递的部分来改变端口部分?
Thx
正如我们(与@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
仅供参考,当所有其他方法都失败时,您只需要完成sed, awk, perl可以提供帮助。下面是一个将服务从ClusterIP更改为NodePort并使用特定端口的示例。
kubectl get service/kubernetes-dashboard -n kubernetes-dashboard -o yaml | sed -E "s/(targetPort:s[0-9]{0,5})/1n nodePort: 32323/" | sed 's/type: ClusterIP/type: NodePort/' | kubectl replace -f -
*请记得先做一个快速备份。