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即可

相关推荐
虎头金猫2 天前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
分布式存储与RustFS2 天前
MinIO 官方 Docker 镜像被移除:依赖它的项目该怎么办
docker·云原生·devops·对象存储·minio·分布式存储
codeejun2 天前
每日一Go·MySQL-5、锁机制全解析
云原生·golang
赵文宇(温玉)2 天前
CoreDNS的hosts插件的缺行配置导致k8s集群异常
容器·kubernetes·rancher
guo_wen_qiang2 天前
上传本地镜像到harbor中
docker·容器·持续部署
张洛闻Eren2 天前
k8s云原生【第十课】:水平 Pod 自动扩缩容
运维·数据库·云原生·kubernetes·github
忆~遂愿3 天前
本地片库怎么在外面打开?Plex + cpolar 搭一套可远程访问的私人影音库
docker·容器
Thneonl3 天前
你的 Pod 为什么 Pending:调度器两阶段
后端·kubernetes
不吃香菜kkk、3 天前
CI/CD(GitOps)学习与部署手册
运维·云原生·容器·kubernetes·云计算·jenkins·argocd
ChaITSimpleLove3 天前
云原生性能对决:JDK21虚拟线程+GraalVM vs .NET10/11 技术栈深度对比
微服务·云原生·serverless·graalvm native·native aot·runtime async·.net11/java21