k8s集群利用svc,ep代理另一个集群的svc服务,让集群正常调用

前提:两套集群的网络互通

背景:客户给两套集群,不通网络环境,但是两套集群中服务需要有调用故用此方法

A集群(未部署服务a,但是部署了服务b,c,d)

B集群 (只部署了服务a)

1,a集群利用svc代理b集群的a和a1服务

如以下yaml(ep中写对应b集群的物理机地址和端口,svc中写你想起什么端口就写什么端口)

bash 复制代码
idaas-nginx-svc.yaml

apiVersion: v1
kind: Service
metadata:
  name: idaas-nginx
  namespace: common
spec:
  clusterIP: 10.233.31.230
  clusterIPs:
  - 10.233.31.230
  ports:
  - name: nginx
    port: 8676   #idaas-nginx的svc端口,可以自定义
    protocol: TCP
    targetPort: nginx
  sessionAffinity: None
  type: ClusterIP
status:
  loadBalancer: {}
bash 复制代码
idaas-nginx-ep.yaml

apiVersion: v1
kind: Endpoints
metadata:
  name: idaas-nginx
  namespace: common
subsets:
- addresses:
  - ip: 172.16.0.2  #idaas集群的物理机地址
  ports:
  - name: nginx
    port: 28082   #idaas集群的idaas-nginx的nodeport端口
    protocol: TCP

直接apply即可

利用已有的svc创建新的svc

kubectl get svc -n xxx xxx -oyaml >> svc-bak.yaml

bash 复制代码
旧的svc

apiVersion: v1
kind: Service
metadata:
  creationTimestamp: "2024-04-24T08:38:46Z"
  labels:
    app.kubernetes.io/component: rabbitmq
    app.kubernetes.io/name: rabbitmq
    app.kubernetes.io/part-of: rabbitmq
  managedFields:
  - apiVersion: v1
    fieldsType: FieldsV1
    fieldsV1:
      f:spec:
        f:externalTrafficPolicy: {}
    manager: kubectl-edit
    operation: Update
    time: "2024-05-13T06:29:57Z"
  - apiVersion: v1
    fieldsType: FieldsV1
    fieldsV1:
      f:metadata:
        f:labels:
          .: {}
          f:app.kubernetes.io/component: {}
          f:app.kubernetes.io/name: {}
          f:app.kubernetes.io/part-of: {}
        f:ownerReferences:
          .: {}
          k:{"uid":"8c6deebb-d6ec-4fce-8810-f04c08746a58"}:
            .: {}
            f:apiVersion: {}
            f:blockOwnerDeletion: {}
            f:controller: {}
            f:kind: {}
            f:name: {}
            f:uid: {}
      f:spec:
        f:ports:
          .: {}
          k:{"port":5552,"protocol":"TCP"}:
            .: {}
            f:appProtocol: {}
            f:name: {}
            f:port: {}
            f:protocol: {}
            f:targetPort: {}
          k:{"port":5672,"protocol":"TCP"}:
            .: {}
            f:appProtocol: {}
            f:name: {}
            f:port: {}
            f:protocol: {}
            f:targetPort: {}
          k:{"port":8552,"protocol":"TCP"}:
            .: {}
            f:name: {}
            f:port: {}
            f:protocol: {}
            f:targetPort: {}
          k:{"port":8672,"protocol":"TCP"}:
            .: {}
            f:name: {}
            f:port: {}
            f:protocol: {}
            f:targetPort: {}
          k:{"port":15672,"protocol":"TCP"}:
            .: {}
            f:appProtocol: {}
            f:name: {}
            f:port: {}
            f:protocol: {}
            f:targetPort: {}
          k:{"port":15692,"protocol":"TCP"}:
            .: {}
            f:appProtocol: {}
            f:name: {}
            f:port: {}
            f:protocol: {}
            f:targetPort: {}
        f:selector:
          .: {}
          f:app.kubernetes.io/name: {}
        f:sessionAffinity: {}
        f:type: {}
    manager: manager
    operation: Update
    time: "2024-05-13T06:29:57Z"
  name: rabbitmq
  namespace: rabbitmq-system
  ownerReferences:
  - apiVersion: rabbitmq.com/v1beta1
    blockOwnerDeletion: true
    controller: true
    kind: RabbitmqCluster
    name: rabbitmq
    uid: 8c6deebb-d6ec-4fce-8810-f04c08746a58
  resourceVersion: "6871272"
  uid: 5b6416e9-fc46-43ac-9315-d9bb58f79082
spec:
  clusterIP: 10.233.21.224
  clusterIPs:
  - 10.233.21.224
  ports:
  - name: other-port
    port: 8672
    protocol: TCP
    targetPort: 8672
  - name: stream-port
    port: 8552
    protocol: TCP
    targetPort: 8552
  - appProtocol: amqp
    name: amqp
    port: 5672
    protocol: TCP
    targetPort: 5672
  - appProtocol: http
    name: management
    port: 15672
    protocol: TCP
    targetPort: 15672
  - appProtocol: rabbitmq.com/stream
    name: stream
    port: 5552
    protocol: TCP
    targetPort: 5552
  - appProtocol: prometheus.io/metrics
    name: prometheus
    port: 15692
    protocol: TCP
    targetPort: 15692
  selector:
    app.kubernetes.io/name: rabbitmq
  sessionAffinity: None
  type: ClusterIP
status:
  loadBalancer: {}
bash 复制代码
新的svc,基于旧的去修改即可
apiVersion: v1
kind: Service
metadata:
  labels:
    app.kubernetes.io/component: rabbitmq
    app.kubernetes.io/name: rabbitmq
    app.kubernetes.io/part-of: rabbitmq
  name: rabbitmq-new
  namespace: rabbitmq-system
spec:
  clusterIP: 
  ports:
  - name: other-port
    port: 8672
    protocol: TCP
    targetPort: 8672
  - name: stream-port
    port: 8552
    protocol: TCP
    targetPort: 8552
  - appProtocol: amqp
    name: amqp
    port: 5672
    protocol: TCP
    targetPort: 5672
  - appProtocol: http
    name: management
    port: 15672
    protocol: TCP
    targetPort: 15672
  - appProtocol: rabbitmq.com/stream
    name: stream
    port: 5552
    protocol: TCP
    targetPort: 5552
  - appProtocol: prometheus.io/metrics
    name: prometheus
    port: 15692
    protocol: TCP
    targetPort: 15692
  selector:
    app.kubernetes.io/name: rabbitmq
  sessionAffinity: None
  type: NodePort
status:
  loadBalancer: {}

修改完后直接kubectl apply -f xxx.yaml即可

相关推荐
炸炸鱼.8 小时前
Kubernetes高级调度02:Taint/Toleration、Cordon/Drain、亲和性与反亲和性完全指南
云原生·容器·kubernetes
海兰11 小时前
Kibana Dashboard as Code:Elastic 9.4 如何用 Terraform 和类型化 API 终结“JSON 垃圾袋“
云原生·json·terraform
geshifei13 小时前
K8s 容器运行 UnixBench — 代理机器执行记录
云原生·容器·kubernetes
Albert Edison15 小时前
【Docker】Ubuntu22.04 安装 Docker 教程
运维·docker·容器
codefan※16 小时前
一键部署私人 LLM:Ollama + Docker 极简指南
运维·docker·容器·大模型·llm·本地部署·ollama
阿里云云原生17 小时前
可观测性的终局?从“面向数据”到“面向对象”,UModel 如何为 AI Agent 注入认知地图
云原生·agent
李南想做条咸鱼18 小时前
k8s集群容器访问域名第一次不通,第二次必通如何解决
云原生·容器·kubernetes
FelixBitSoul18 小时前
K8s 调度器黑盒全拆解:拓扑约束数学陷阱 + Go 插件二开实战(避坑全记录)
容器·kubernetes
叶~小兮18 小时前
K8s常用组件学习笔记
笔记·学习·kubernetes
ん贤18 小时前
Volcano 详细笔记
云原生·volcano