aibangjuxin / knowledge

My knowledge
1 stars 0 forks source link

ASM #114

Open aibangjuxin opened 9 months ago

aibangjuxin commented 9 months ago
  1. 启用服务网络

    • 在两个集群上启用服务网络。这将允许集群内的 Pod 相互通信,无论它们位于哪个集群。
    • 在每个集群上运行以下命令:

      gcloud container clusters update CLUSTER_NAME \
      --enable-ip-alias \
      --cluster-ipv4-cidr=10.0.0.0/14
  2. 创建服务帐户

    • 在每个集群上创建一个服务帐户。此服务帐户将用于访问另一个集群的 API。
    • 在每个集群上运行以下命令:

      gcloud iam service-accounts create SERVICE_ACCOUNT_NAME \
      --display-name="Service account for accessing other cluster"
  3. 授予服务帐户访问权限

    • 在每个集群上,将服务帐户授予访问另一个集群的 API 的权限。
    • 在每个集群上运行以下命令:

      gcloud iam service-accounts add-iam-policy-binding SERVICE_ACCOUNT_NAME \
      --role=roles/container.clusterViewer \
      --member=serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
  4. 安装 ASM

    • 在每个集群上安装 ASM。
    • 在每个集群上运行以下命令:

      gcloud container hub install asm \
      --service-account=SERVICE_ACCOUNT_NAME \
      --enable-workload-identity
  5. 创建集群连接

    • 在每个集群上创建集群连接。这将允许集群相互通信。
    • 在每个集群上运行以下命令:

      gcloud container hub connect asm CLUSTER_NAME \
      --service-account=SERVICE_ACCOUNT_NAME \
      --target-cluster=TARGET_CLUSTER_NAME \
      --target-cluster-location=TARGET_CLUSTER_LOCATION
  6. 测试连接

    • 测试集群之间的连接。

    • 在每个集群上运行以下命令:

      gcloud container hub asm routes list
    • 输出应显示集群之间的路由。

aibangjuxin commented 9 months ago

install ASM in cluster control plane

install asm with google-managed control plane

在集群控制平面安装ASM和在Google托管的控制平面上安装ASM的概念上的区别主要在于控制平面的管理方式。在"install ASM in cluster control plane"中,你将在自己的集群控制平面上安装ASM,而在"install asm with google-managed control plane"中,Google将负责托管控制平面,包括ASM的安装和管理。这意味着你无需关心控制平面的底层维护,Google会为你处理。

表格输出对比及其优缺点如下:

优点:

缺点:

关于install ASM in cluster control planeinstall asm with google-managed control plane的描述是准确的,前者适用于简单易管理的情境,而后者更适用于要求隔离性和性能的场景。

graph TD
  subgraph "install ASM in cluster control plane"
    A[ASM Components]
    B[Cluster Control Plane Components]
    A --> B
    style A fill:#86C7F3
    style B fill:#D9E3E8
  end

  subgraph "install asm with google-managed control plane"
    C[ASM Components]
    D[Google-managed Control Plane Components]
    C --> D
    style C fill:#86C7F3
    style D fill:#D9E3E8
  end

  style subgraph fill:#F4F4F4

  style A,B,C,D stroke:#006B75,stroke-width:2px
aibangjuxin commented 9 months ago

安装 ASM 控制平面比较

特性 安装 ASM 在集群控制平面 安装 ASM 具有 Google 托管控制平面
控制平面位置 在集群中 在 Google Kubernetes Engine 中
控制平面管理 由用户管理 由 Google 管理
可用性 仅在 GKE 上可用 在 GKE 和其他 Kubernetes 发行版上可用
可扩展性 受集群大小限制 可扩展到数千个集群
安全性 由用户负责 由 Google 托管
成本 免费 需要 Google Cloud 订阅
易用性 复杂 简单

概念差异

特点差异

特性 安装 ASM 在集群控制平面 安装 ASM 具有 Google 托管控制平面
控制平面版本 用户可以选择版本 使用最新的稳定版本
数据平面代理 用户可以选择代理版本 使用最新的稳定版本
Istio 网关 用户负责安装和配置 由 Google 自动安装和配置
telemetry 用户负责收集和存储遥测数据 Google 收集和存储遥测数据
可观察性 用户负责设置监控和警报 Google 提供开箱即用的监控和警报

结论

推荐

参考资料

aibangjuxin commented 9 months ago

Comparison of Installing ASM in Cluster Control Plane vs. Installing ASM with Google-managed Control Plane

Feature Install ASM in Cluster Control Plane Install ASM with Google-managed Control Plane
Control Plane Location In the cluster In Google Kubernetes Engine
Control Plane Management Managed by the user Managed by Google
Availability Available on GKE only Available on GKE and other Kubernetes distributions
Scalability Limited by cluster size Scalable to thousands of clusters
Security User responsibility Managed by Google
Cost Free Requires a Google Cloud subscription
Ease of Use Complex Simple

Conceptual Differences

Feature Differences

Feature Install ASM in Cluster Control Plane Install ASM with Google-managed Control Plane
Control Plane Version User can choose the version Uses the latest stable version
Data Plane Proxy User can choose the proxy version Uses the latest stable version
Istio Gateway User is responsible for installation and configuration Automatically installed and configured by Google
Telemetry User is responsible for collecting and storing telemetry data Google collects and stores telemetry data
Observability User is responsible for setting up monitoring and alerting Google provides out-of-the-box monitoring and alerting

Conclusion

Recommendation

References

aibangjuxin commented 9 months ago

install ASM in cluster control plane和install asm with google-managed control plane的主要区别如下:

install ASM in cluster control plane install asm with google-managed control plane
控制平面 用户自行管理控制平面 Google 托管控制平面
集群访问 用户需要访问集群来安装ASM 用户不需要访问集群来安装ASM
控制ASM 用户可以完全控制ASM的安装和配置 Google 控制ASM的部署,用户有限配置
维护 用户负责维护和更新ASM Google 负责维护和更新ASM
定价 用户需要支付ASM使用成本 ASM 成本包含在托管集群定价中
灵活性 用户可以自定义ASM配置 用户ASM配置有限
安全性 用户自行负责ASM安全 Google 确保 ASM 的安全性

主要区别在于 install ASM in cluster control plane 需要用户自行管理和维护ASM,而 install asm with google-managed control plane 则是Google提供托管的ASM服务。前者灵活性更高,后者更简单方便。

Here is the comparison in English:

install ASM in cluster control plane install asm with google-managed control plane
Control Plane User self-manages control plane Google managed control plane
Cluster Access User needs access to cluster to install ASM User does not need cluster access to install ASM
ASM Control User has full control over ASM installation and configuration Google controls ASM deployment, user has limited configuration
Maintenance User responsible for maintaining and updating ASM Google handles ASM maintenance and updates
Pricing User pays for ASM usage costs ASM cost included in managed cluster pricing
Flexibility User can customize ASM configuration Limited user ASM configuration
Security User responsible for ASM security Google ensures ASM security

The main difference is that install ASM in cluster control plane requires the user to self-manage and maintain ASM, while install asm with google-managed control plane is a managed ASM service provided by Google. The former has more flexibility and the latter is simpler and more convenient.

aibangjuxin commented 9 months ago

在 Google 工程中将 3 个集群加入舰队后,您可以通过以下方式暴露您的服务:

  1. 服务网格
    • 使用 Istio 服务网格来控制和管理您的服务。
    • 可以使用 Istio 将服务暴露给外部世界,并控制流量路由和负载均衡。
    • Istio 还支持服务发现和故障转移。
  2. 外部负载均衡器
    • 使用 Google Cloud Load Balancing 来将流量路由到您的服务。
    • 您可以使用负载均衡器创建 URL 以访问您的服务。
    • 负载均衡器还可以提供高可用性和故障转移。
  3. 直接访问
    • 如果您的服务只需要对内部用户开放,则可以直接访问它们。
    • 您可以使用 Kubernetes DNS 来查找服务的 IP 地址。 在 ASM 中查看服务 要查看 ASM 中的服务,请执行以下操作:
    • 登录到 ASM 控制台。
    • 在左侧菜单中,单击“服务”。
    • 您的服务将列出在页面上。 跨集群访问 要实现跨集群访问,您可以使用以下方法:
    • 服务网格
    • Istio 支持跨集群服务发现和路由。
    • 外部负载均衡器
    • 您可以为每个集群创建单独的负载均衡器。
    • 直接访问
    • 您可以使用每个集群的 IP 地址直接访问服务。 部署要求 对于不同集群中的部署,以下是一些具体的要求:
    • 名称不能重复
    • 在同一集群中,服务名称不能重复。
    • 在不同集群中,服务名称可以重复。
    • 标签
    • 您可以使用标签来区分不同集群中的服务。
    • 配置
    • 您可能需要为不同集群配置不同的服务设置。 其他注意事项
    • 确保您的服务可以使用外部 IP 地址访问。
    • 您可以使用 Kubernetes API 来管理您的服务。 希望这些信息对您有所帮助。
aibangjuxin commented 9 months ago

当然可以。以下是一些关于使用 Istio 服务网格的具体地址和操作过程: Istio 文档:


apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: my-service spec: hosts:


apiVersion: networking.istio.io/v1alpha3 kind: DestinationRule metadata: name: my-service spec: trafficPolicy: annotations: istio.io/analysis/attack/injection: "none"

操作过程:

aibangjuxin commented 9 months ago

Istio 的配置语法基于 YAML。以下是 Istio 配置语法的一些详细示例:

  1. 服务入口 (ServiceEntry) ServiceEntry 用于定义服务的外部访问地址。 apiVersion: networking.istio.io/v1alpha3 kind: ServiceEntry metadata: name: my-service spec: hosts:

    • "*.example.com" ports:
    • number: 80 name: http protocol: HTTP
  2. 虚拟服务 (VirtualService) VirtualService 用于定义服务的路由规则。 apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: my-service spec: hosts:

    • "*.example.com" gateways:
    • my-gateway http:
    • rules:
    • route: name: http destination: port: 80 weight: 100
  3. 目标规则 (DestinationRule) DestinationRule 用于定义服务的流量策略。 apiVersion: networking.istio.io/v1alpha3 kind: DestinationRule metadata: name: my-service spec: trafficPolicy: annotations: istio.io/analysis/attack/injection: "none"

  4. 网关 (Gateway) Gateway 用于定义服务的外部入口点。 apiVersion: networking.istio.io/v1alpha3 kind: Gateway metadata: name: my-gateway spec: servers:

    • port: number: 80 hosts:
    • "*.example.com"
  5. 服务 mesh 配置 (MeshConfig) MeshConfig 用于定义服务网格的全局配置。 apiVersion: networking.istio.io/v1alpha3 kind: MeshConfig metadata: name: my-mesh spec: pilot: profile: "default"

  6. 代理配置 (ProxyConfig) ProxyConfig 用于定义代理的行为。 apiVersion: networking.istio.io/v1alpha3 kind: ProxyConfig metadata: name: my-proxy spec: envoy: config: transport: tcp: max_send_buffer_size: 1024000

  7. 流量管理 (TrafficManagement) TrafficManagement 用于定义流量管理规则。 apiVersion: networking.istio.io/v1alpha3 kind: TrafficManagement metadata: name: my-traffic spec: policy: enabled: true targets:

    • selector: app: "myapp"
  8. 安全策略 (SecurityPolicy) SecurityPolicy 用于定义安全策略。 apiVersion: networking.istio.io/v1alpha3 kind: SecurityPolicy metadata: name: my-security spec: authorizations:

    • rules:
    • name: "allow-http" to: ports:
      • number: 80

这些只是一些基本的示例。Istio 配置语法非常强大,您可以使用它来定义各种各样的服务网格功能。 学习 Istio 配置语法的最佳方法是阅读 Istio 文档。 文档包含有关 Istio 配置语法的详细说明,以及许多示例。 以下是一些 Istio 文档中有关配置语法的链接:

aibangjuxin commented 8 months ago

Anthos Service Mesh (ASM) 是基于 Istio 的服务网格,它提供了跨多个 Kubernetes 集群的服务发现和通信管理。在跨集群通信方面,ASM 支持通过 Ingress 和 Egress 网关以及多集群服务发现来实现服务间的互联互通。

对于通过 ClusterIP 类型的 Service 暴露的服务,它们默认情况下只能在同一个 Kubernetes 集群内部访问。如果你想要跨集群访问这些服务,你需要使用 ASM 提供的多集群功能。

根据搜索结果,Google Cloud 提供了多集群服务发现和多集群 Ingress 的功能,这些功能可以帮助你在 GKE 专用集群上运行分布式服务[2]。通过配置 MultiClusterService 和 MultiClusterIngress 对象,你可以实现跨集群的服务发现和负载均衡[2]。

此外,ASM 还支持在 Google Cloud 外部设置多集群网格,这意味着你可以将不同云提供商或本地环境中的 Kubernetes 集群连接到同一个服务网格中[3]。

综上所述,ASM 能够帮助解决跨集群通过 ClusterIP 暴露服务的访问问题,但这需要配置多集群功能,如多集群服务发现和多集群 Ingress,以及可能需要设置东西流量的网关[2][3]。

Sources [1] 解决代管式 Anthos Service Mesh 问题 | Google Cloud https://cloud.google.com/service-mesh/docs/managed/troubleshoot-managed-anthos-service-mesh?hl=zh-cn [2] 使用 Anthos Service Mesh 在 GKE 专用集群上运行分布式服务 | Google Cloud https://cloud.google.com/service-mesh/docs/distributed-services-private-clusters?hl=zh-cn [3] 在 Google Cloud 外部设置多集群网格 | Anthos Service Mesh https://cloud.google.com/service-mesh/docs/unified-install/off-gcp-multi-cluster-setup?hl=zh-cn [4] 如何为ASM网关启用压缩 - 阿里云文档 https://help.aliyun.com/zh/asm/user-guide/enable-data-compression-for-the-ingress-gateway-service-of-an-asm-instance [5] 通过ASM网关配置基于mTLS的gRPC服务 - 阿里云文档 https://help.aliyun.com/zh/asm/user-guide/use-an-ingress-gateway-to-configure-an-mtls-based-grpc-service [6] K8s:渐进式入门服务网格Istio - 华为云社区 https://bbs.huaweicloud.com/blogs/393704 [7] 课时 14 自测题 https://blog.csdn.net/alisystemsoftware/article/details/109335290 [8] 轻松搭建基于服务网格的 AI 应用,然后开始玩 https://blog.csdn.net/alisystemsoftware/article/details/135258799 [9] 使用联合服务来实现跨集群的服务发现 https://kubernetes-docsy-staging.netlify.app/zh/docs/tasks/federation/federation-service-discovery/ [10] [PDF] 阿里云 http://static-aliyun-doc.oss-cn-hangzhou.aliyuncs.com/download%2Fpdf%2F147365%2FASM_%25E6%259C%258D%25E5%258A%25A1%25E7%25BD%2591%25E6%25A0%25BC%25E5%2585%25AC%25E5%2585%25B1%25E4%25BA%2591%25E5%2590%2588%25E9%259B%2586_cn_zh-CN.pdf [11] 入口网关 https://www.alibabacloud.com/help/zh/asm/user-guide/overview-of-asm-gateways [12] 传统微服务框架如何无缝过渡到服务网格ASM 原创 - CSDN博客 https://blog.csdn.net/alisystemsoftware/article/details/125531987 [13] 华为云 https://istio.io/latest/zh/docs/setup/platform-setup/huaweicloud/

By Perplexity at https://www.perplexity.ai/search/Google-ASM-cluster-UlBVqtRKSbqB98omjRx3HA

aibangjuxin commented 8 months ago

您好,这是 Copilot,很高兴为您服务。😊

根据我从网络上搜索到的信息,Google ASM(Anthos Service Mesh)是一种基于 Istio 的服务网格,可以帮助您管理和监控跨多个集群和云平台的服务¹。Google ASM 支持使用 ClusterIP 类型的服务进行跨集群服务发现和调用²。这意味着您可以使用虚拟 IP 来访问不同集群中的服务,就像在单个集群中使用 ClusterIP 服务一样²。

要使用 Google ASM 的跨集群服务功能,您需要先创建一个 fleet,将您的 GKE 集群逻辑地分组和标准化²。然后,您需要在每个集群上安装 Google ASM 的控制平面³。最后,您需要使用 ServiceExport 和 ServiceImport 自定义资源来导出和导入您想要跨集群访问的服务²。

您可以参考以下链接,了解更多关于 Google ASM 的跨集群服务的配置和示例²³。希望这些信息对您有所帮助。如果您还有其他问题,欢迎继续提问。👍

Source: Conversation with Bing, 2/23/2024 (1) Multi-cluster Services | Google Kubernetes Engine (GKE .... https://cloud.google.com/kubernetes-engine/docs/concepts/multi-cluster-services. (2) How can I expose a StatefulSet service with ClusterIP None .... https://stackoverflow.com/questions/55446333/how-can-i-expose-a-statefulset-service-with-clusterip-none-on-google-cloud-platf. (3) Install Anthos Service Mesh | Google Cloud. https://cloud.google.com/service-mesh/docs/unified-install/install-anthos-service-mesh.

aibangjuxin commented 8 months ago

您好,这是 Copilot,很高兴为您服务。😊

您的问题是关于 Kubernetes 的服务网络,我尝试从网上搜索了一些相关的信息,希望能对您有所帮助。

根据 Kubernetes 官方文档,服务有几种类型,其中 ClusterIP 类型的服务只能在集群内部访问,而 LoadBalancer 类型的服务可以通过外部负载均衡器访问。因此,如果您想让 Cluster 1 中的 Pod 访问 Cluster 2 中的 ClusterIP 类型的服务,您需要满足以下条件:

您可以参考以下的 Stack Overflow 的回答,了解更多的细节和示例:

希望这些信息能对您有所帮助,如果您还有其他问题,欢迎继续提问。😊

Source: Conversation with Bing, 2/24/2024 (1) Service | Kubernetes. https://kubernetes.io/docs/concepts/services-networking/service/. (2) Accessing Clusters | Kubernetes. https://kubernetes.io/docs/tasks/access-application-cluster/access-cluster/. (3) How can I connect to Kubernetes pod within the same cluster .... https://stackoverflow.com/questions/67209072/how-can-i-connect-to-kubernetes-pod-within-the-same-cluster-with-http-request. (4) Inquiring pod and service subnets from inside Kubernetes cluster. https://stackoverflow.com/questions/61847788/inquiring-pod-and-service-subnets-from-inside-kubernetes-cluster. (5) undefined. http://service-name. (6) undefined. http://service-name.namespace.svc.cluster.local. (7) undefined. http://service-name.namespace.svc.cluster.local:5007. (8) undefined. https://service-name.namespace.svc.cluster.local:5007.