当前位置: 首页 > news >正文

kubernetes给service动态增加服务端口

根据kubernetes官方文档的说明,service的ports规则支持merge操作:

ports
ServicePort array
patch strategy: merge
patch merge key: port
The list of ports that are exposed by this service. More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies

Kubernetes API Reference Docs

我们进行以下实验:

一、创建service:

nginx-svc.yaml:

apiVersion: v1
kind: Service
metadata:name: nginx
spec:type: NodePortselector:app: nginxports:- protocol: TCPnodePort: 30080port: 8080targetPort: 80name: my80externalTrafficPolicy: Local

创建:

kubectl apply -f nginx-svc.yaml

查看svc定义:

[work@el7 minikube]$ kubectl get svc nginx -o yaml
apiVersion: v1
kind: Service
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"name":"nginx","namespace":"default"},"spec":{"externalTrafficPolicy":"Local","ports":[{"name":"my80","nodePort":30080,"port":8080,"protocol":"TCP","targetPort":80}],"selector":{"app":"nginx"},"type":"NodePort"}}
  creationTimestamp: "2024-10-18T01:46:39Z"
  name: nginx
  namespace: default
  resourceVersion: "104596"
  uid: 5dad10d6-f60d-4870-948a-e009066bfef3
spec:
  clusterIP: 10.108.12.23
  clusterIPs:
  - 10.108.12.23
  externalTrafficPolicy: Local
  internalTrafficPolicy: Cluster
  ipFamilies:
  - IPv4
  ipFamilyPolicy: SingleStack
  ports:
  - name: my80
    nodePort: 30080
    port: 8080
    protocol: TCP
    targetPort: 80
  selector:
    app: nginx
  sessionAffinity: None
  type: NodePort
status:
  loadBalancer: {}

访问node的30080端口正常:

[work@el7 minikube]$ curl '192.168.49.3:30080'
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>

二、启动压测脚本访问30080端口:

1、压测现有端口30080:

sh curl-press-30080.sh > 30080.log

并发访问30080端口,在日志记录返回的状态码。

2、压测即将新增的端口30081:

sh curl-press-30081.sh > 30081.log

并发访问30081端口,在日志记录返回的状态码。

3、创建到30080的长连接:

telnet 192.168.49.3 30080

观察长连接是否会断开。

三、patch给服务新增端口30081:

nginx-svc-patch.yaml:

spec:ports:- protocol: TCPnodePort: 30081port: 8081targetPort: 8001name: my8001

增加端口:

kubectl patch svc nginx --patch "`cat ./nginx-svc-patch.yaml`"

查看svc定义:

[work@el7 minikube]$ kubectl get svc nginx -o yaml
apiVersion: v1
kind: Service
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"name":"nginx","namespace":"default"},"spec":{"externalTrafficPolicy":"Local","ports":[{"name":"my80","nodePort":30080,"port":8080,"protocol":"TCP","targetPort":80}],"selector":{"app":"nginx"},"type":"NodePort"}}
  creationTimestamp: "2024-10-18T01:46:39Z"
  name: nginx
  namespace: default
  resourceVersion: "104725"
  uid: 5dad10d6-f60d-4870-948a-e009066bfef3
spec:
  clusterIP: 10.108.12.23
  clusterIPs:
  - 10.108.12.23
  externalTrafficPolicy: Local
  internalTrafficPolicy: Cluster
  ipFamilies:
  - IPv4
  ipFamilyPolicy: SingleStack
  ports:
  - name: my8001
    nodePort: 30081
    port: 8081
    protocol: TCP
    targetPort: 8001
  - name: my80
    nodePort: 30080
    port: 8080
    protocol: TCP
    targetPort: 80
  selector:
    app: nginx
  sessionAffinity: None
  type: NodePort
status:
  loadBalancer: {}

四、查看压测脚本和长连接的情况:

1、30081.log,在某个时间点http状态码由异常转为200。

2、30080.log,未出现非200状态码。

3、telnet长连接未断开。

五、增加后想删除怎么办?

找到新增端口在/spec/ports/里的索引位置,比如上面新增的my8001在第一个位置,索引为0,那删除操作如下:

kubectl patch svc nginx --type json --patch='[{"op":"remove","path":"/spec/ports/0"}]'

--end--

http://www.lryc.cn/news/462945.html

相关文章:

  • 如何将 html 渲染后的节点传递给后端?
  • ubuntu24 finalshell 无法连接ubuntu服务器, 客户端无法连接ubuntu, 无法远程连接ubuntu。
  • 牛客编程初学者入门训练——BC19 牛牛的对齐
  • log file sync 内部执行过程
  • 【动手学深度学习】7.5 批量规范化(个人向笔记)
  • 111 - exercise 5
  • 第二十五:IP网络层的数据,IP数据报
  • 三菱FX3UPLC机械原点回归- DSZR/ZRN指令
  • 网络通信与并发编程(三)粘包现象解决方案、socketserver实现并发
  • 使用Uniapp开发微信小程序实现一个自定义的首页顶部轮播图效果?
  • 软硬连接及动静态库
  • vue3.0 + vite:中使用 sass
  • 搭建`mongodb`副本集-开启权限认证 mongo:7.0.5
  • 智能工厂的软件设计 由“原力“篇引发的思考: 回顾、展望和本位 之2 修订稿之2
  • 2025选题推荐|基于SpringBoot的幼儿园智能管理与监控系统的设计与实现
  • mqtt客户端订阅一直重复连接?
  • SegFormer: 一个基于Transformer的高效视觉图像分割算法
  • SoC芯片中Clock Gen和Reset Gen的时钟树综合
  • 学习资料:电子标签拣货技术
  • Git 提交规范参考
  • 【前端】Matter:物体的高级控制
  • ASP.NET Core 路由规则 MapControllerRoute、MapDefaultControllerRoute、MapController
  • linux命令之less用法
  • 试用cursor的简单的记录
  • 下载Edge/Chrome浏览器主题的背景图片
  • Python解力扣算法题4(基础)
  • 鸿蒙NEXT开发-网络管理(基于最新api12稳定版)
  • 【LeetCode每日一题】——1413.逐步求和得到正数的最小值
  • 音频分割:长语音音频 分割为 短语音音频 - python 实现
  • 【Echarts动态排序图,series使用背景色更新动画,背景底色不同步跟随柱子动画】大家有没有解决方案