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