赛尔校园公共服务平台 Logo
平台使用
阿里云
百度云
移动云
智算服务
教育生态
登录 →
赛尔校园公共服务平台 Logo
平台使用 阿里云 百度云 移动云 智算服务 教育生态
登录
  1. 首页
  2. 阿里云
  3. 分布式云容器平台ACK One
  4. 操作指南
  5. 多集群舰队
  6. 多集群服务
  7. 使用原生Service域名跨集群服务访问

使用原生Service域名跨集群服务访问

  • 多集群服务
  • 发布于 2025-04-18
  • 0 次阅读
文档编辑
文档编辑

ACK One多集群Service支持通过MultiClusterService实现用原生Service域名跨集群服务访问。无需修改业务代码、业务Pod的DNSConfig配置或CoreDNS配置,直接使用原生Service便可实现跨集群流量路由。

前提条件

  • 已开启舰队管理功能。

  • 舰队的Fleet实例已添加2个关联集群(Provider Cluster & Consumer Cluster)。具体操作,请参见管理关联集群。

  • 关联集群的版本不低于1.22。

  • 关联集群(Provider Cluster & Consumer Cluster)的Pod CIDR已相互可通。具体操作,请参见多集群服务概述。

    说明

    集群间的Pod CIDR互通后,请确保集群的节点池安全组已放行与之互通集群的Pod CIDR。

  • 获取Provider Cluster、Consumer Cluster和舰队的KubeConfig,并通过kubectl连接集群。具体操作,请参见获取集群KubeConfig并通过kubectl工具连接集群。

基于MultiClusterService的多集群服务架构

image

在Consumer Cluster中,通过Client Pod访问Provider Cluster中的Service流程如下:

  1. 在Provider Cluster中创建service1及应用Pod,在Consumer Cluster中创建要提供服务的service1。

  2. 在舰队中创建MultiClusterService(与Service1同名同namespace),并配置Provider Cluster和Consumer Cluster。

  3. 在Consumer Cluster中创建Client Pod,可以通过原生Service域名访问到Provider Cluster中的Service1的Pods。

说明

本文以命令行方式介绍如何部署应用及服务,您也可以通过舰队中GitOps和应用分发功能,将资源下发到关联集群。

步骤一:在Provider Cluster中部署Service1服务

  1. 使用Provider Cluster的KubeConfig,通过以下示例内容,创建web-demo-svc-provider.yaml。

    apiVersion: v1
    kind: Service
    metadata:
      name: service1
      namespace: provider-ns
    spec:
      ports:
      - port: 80
        protocol: TCP
        targetPort: 8080
      selector:
        app: web-demo
      sessionAffinity: None
      type: ClusterIP
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: web-demo
      namespace: provider-ns
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: web-demo
      template:
        metadata:
          creationTimestamp: null
          labels:
            app: web-demo
        spec:
          containers:
          - env:
            - name: ENV_NAME
              value: cluster-provider
            image: registry-cn-hangzhou.ack.aliyuncs.com/acs/web-demo:0.5.0
            imagePullPolicy: Always
            name: web-demo
          dnsPolicy: ClusterFirst
          restartPolicy: Always
          schedulerName: default-scheduler
  2. 执行以下命令,部署service1服务及应用Pod。

    kubectl apply -f web-demo-svc-provider.yaml

步骤二:在Consumer Cluster中部署Service1服务

  1. 使用Consumer Cluster的KubeConfig,通过以下示例内容,创建web-demo-svc-consumer.yaml。

    说明

    只需部署Service资源以提供服务域名,无需部署实际的业务Pod。

    apiVersion: v1
    kind: Service
    metadata:
      name: service1
      namespace: provider-ns
    spec:
      ports:
      - port: 80
        protocol: TCP
        targetPort: 8080
      selector:
        app: web-demo
      sessionAffinity: None
      type: ClusterIP
  2. 执行以下命令,部署service1服务。

    kubectl apply -f web-demo-svc-consumer.yaml

步骤三:在舰队中创建MultiClusterService

  1. 使用舰队的KubeConfig,通过以下示例内容,创建multiclusterservice.yaml。

    说明
    • 请将 <your consumer cluster id> 和 <your provider cluster id> 替换为您关联的集群ID。

    • MultiClusterService的name和namespace需与要提供跨集群访问的服务service1保持一致。

    apiVersion: networking.one.alibabacloud.com/v1alpha1
    kind: MultiClusterService
    metadata:
       name: service1
       namespace: provider-ns
    spec:
      consumerClusters:
        - name: <your consumer cluster id>
      providerClusters:
        - name: <your provider cluster id>
  2. 执行以下命令,将service1对应的MultiClusterService部署到舰队。

    kubectl apply -f multiclusterservice.yaml

步骤四:通过Client Pod跨集群访问Service1

  1. 使用Consumer Cluster的KubeConfig,通过以下示例内容,创建client-pod.yaml。

    apiVersion: v1
    kind: Pod
    metadata:
      name: curl-client
      namespace: customer-ns
    spec:
      containers:
      - name: curl-client
        image: registry-cn-hangzhou.ack.aliyuncs.com/dev/curl:8.11.1
        command: ["sh", "-c", "sleep 12000"]
  2. 执行以下命令,在Consumer Cluster中部署Client Pod。

    kubectl apply -f client-pod.yaml
  3. 执行以下命令,在Consumer Cluster中,进入Client Pod,并跨集群访问Provider Cluster的service1服务。

    kubectl exec -it -ncustomer-ns curl-client -- sh
    
    curl service1.provider-ns

    预期输出:

    This is cluster-provider!
相关文章

多集群服务概述 2025-04-18 18:10

随着Kubernetes集群的广泛应用,企业往往需要运行和管理多个Kubernetes集群,来满足业务隔离部署运维的需求,但业务之间还需要相互访问。通过多集群服务,让您无需创建负载均衡,即可实现Kubernetes服务的跨集群访问。本文介绍多集群服务的架构、场景和网络规划。

通过命令行管理多集群服务 2025-04-18 18:10

通过多集群服务,让您无需创建负载均衡,即可实现Kubernetes服务的跨集群访问。本文通过示例介绍如何在Fleet实例上创建ServiceExport、ServiceImport等资源来管理多集群服务,实现Kubernetes服务的跨集群访问。 前提条件

通过控制台管理多集群服务 2025-04-18 18:10

通过多集群服务,您无需创建负载均衡,即可实现Kubernetes服务的跨集群访问。本文介绍如何通过控制台来管理多集群服务,实现Kubernetes服务的跨集群访问。 概述 通过多集群服务实现Kubernetes服务的

使用多集群Ingress 2025-04-18 18:10

Ingress为Kubernetes集群中对外的七层负载均衡,可通过Ingress规则描述将请求匹配到对应的后端服务和应用上。您可以通过配置多集群Service和Ingress规则,将请求转发到多个集群中的服务。本文介绍如何使用多集群Ingress。

通过Headless类型多集群Service跨集群访问有状态服务的指定实例 2025-04-18 18:10

通过多集群服务,无需负载均衡,即可实现Kubernetes服务的跨集群访问。Headless类型服务不仅支持跨集群服务访问,还可以根据域名选择服务中的指定Pod实例进行访问,适用于有状态服务(StatefulSets)的应用,如分布式数据库、消息队列等。本文以MySQL为例,介绍如何通过Headle

使用原生Service域名跨集群服务访问 2025-04-18 18:09

ACK One多集群Service支持通过MultiClusterService实现用原生Service域名跨集群服务访问。无需修改业务代码、业务Pod的DNSConfig配置或CoreDNS配置,直接使用原生Service便可实现跨集群流量路由。 前提条件

目录
Copyright © 2025 your company All Rights Reserved. Powered by 赛尔网络.
京ICP备14022346号-15
gongan beian 京公网安备11010802041014号