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

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: NodePort
  selector:
    app: nginx
  ports:
    - protocol: TCP
      nodePort: 30080
      port: 8080
      targetPort: 80
      name: my80
  externalTrafficPolicy: 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: TCP
      nodePort: 30081
      port: 8081
      targetPort: 8001
      name: 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.kler.cn/news/355836.html

相关文章:

  • 018_FEA_Structure_Static_in_Matlab三维结构静力学分析
  • JS | JS之元素偏移量 offset 系列属性详解
  • RHCE笔记-时间服务器搭建
  • 【Flutter】基础入门:代码基本结构
  • 深度学习:元学习(Meta-Learning)详解
  • 自搭建VSCode的Make构建工具选择
  • 深度学习的关键概念和术语
  • MySQL-14.DQL-分组查询
  • 用python绘制钟表,并实现实际应用
  • HarmonyOS中ArkUi框架中常用的装饰器
  • 面对配分函数 - 噪扰对比估计(NCE)篇
  • windows的CMD命令提示符
  • 用 Python 构建高级配对交易策略
  • C++算法练习-day7——707.设计链表
  • 【Git】将其它分支的单个改动复制到当前分支
  • 基于ESP32的便携式游戏机
  • Elasticsearch Inference API 增加对阿里云 AI 的支持
  • 021_Thermal_Transient_in_Matlab统一偏微分框架之热传导问题
  • Openlayers高级交互(3/20):动态添加 layer 到 layerGroup,并动态删除
  • 【2D/3D-Lidar-SLAM】 Cartographer详细解读