阿里云容器服务基于Istio实现多Kubernetes集群上的应用服务混合编排

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 本文通过一个官方示例来重点介绍在阿里云容器服务上如何基于Istio实现多Kubernetes集群上的应用服务混合编排。你可以看到在 一个 Kubernetes 集群上安装 Istio 控制平面,然后Istio连接了2个 Kubernetes 集群之后,就会生成一个跨越多个 Kubernetes 集群的Service Mesh。

概述

Istio 的一个重要目标是支持混合型环境,例如可以将服务运行在阿里云容器服务、本地Kubernetes 集群,或是其他公有云的服务上。Istio 能够为整体服务平台提供一个统一的视图,管理这些环境之间的连接并确保安全性。Istio多集群支持的架构,允许将多个 Kubernetes 集群加入一个单独的 mesh 中,并启用跨集群的服务发现功能。按照官方介绍,它还将支持全球化的集群级别的负载均衡,并通过 Gateway 对等互联提供对非扁平网络的支持。

在上一篇阿里云容器服务基于Istio实现Kubernetes与ECS上的应用服务混合编排中介绍阿里云Kubernetes容器服务提供的Istio Mesh Expansion整合能力。

本文通过一个官方示例来重点介绍在阿里云容器服务上如何基于Istio实现多Kubernetes集群上的应用服务混合编排。你可以看到在 一个 Kubernetes 集群上安装 Istio 控制平面,然后Istio连接了2个 Kubernetes 集群之后,就会生成一个跨越多个 Kubernetes 集群的网格网络。

图片.png

准备Kubernetes集群

阿里云容器服务Kubernetes 1.10.4目前已经上线,可以通过容器服务管理控制台非常方便地快速创建 Kubernetes 集群。具体过程可以参考创建Kubernetes集群

确保安装配置kubectl 能够连接上Kubernetes 集群,并满足以下网络要求:

  • 各集群的 Pod CIDR 范围和 Service CIDR 范围必须是唯一的,不允许相互重叠。
  • 每个集群中的所有的 Pod CIDR 需要能够互相路由。
  • 所有的 Kubernetes 控制平面 API Server 互相可路由。
集群 ContainerCIDR ServiceCIDR
Istio-control-plane 172.16.0.0/16 172.19.0.0/20
Istio-remote1 172.20.0.0/16 172.21.0.0/20

本示例中涉及到的文件可以从 这里 获取到。

安装Istio控制平面

接着,就像前面系列文章中介绍的步骤,通过应用目录简便部署Istio。点击左侧的应用目录,在右侧选中ack-istio,在打开的页面中选择命名空间 istio-system,并点击参数, 可以通过修改参数配置进行定制化安装:

......
   istio-ilbgateway:
      enabled: true
......

注意#1:说明文档提供了安装和卸载的一些重要信息,特别是常见的CRD(custom resource definition)版本问题。

注意#2:在使用阿里云Kubernetes容器服务Istio 1.0的过程中,如果遇到类似CRD版本问题,请参考我们提供的 阿里云Kubernetes容器服务Istio实践之常见问题分析 。 我们会持续更新遇到的问题及其解决方法。

图片.png

安装 Istio 远程组件

通过以下脚本可以获取到控制平面的连接信息:

export PILOT_POD_IP=$(kubectl -n istio-system get pod -l istio=pilot -o jsonpath='{.items[0].status.podIP}')
export POLICY_POD_IP=$(kubectl -n istio-system get pod -l istio=mixer -o jsonpath='{.items[0].status.podIP}')
export STATSD_POD_IP=$(kubectl -n istio-system get pod -l istio=statsd-prom-bridge -o jsonpath='{.items[0].status.podIP}')
export TELEMETRY_POD_IP=$(kubectl -n istio-system get pod -l istio-mixer-type=telemetry -o jsonpath='{.items[0].status.podIP}')
export ZIPKIN_POD_IP=$(kubectl -n istio-system get pod -l app=jaeger -o jsonpath='{.items[0].status.podIP}')
echo "remotePilotAddress: $PILOT_POD_IP"
echo "remotePolicyAddress: $POLICY_POD_IP"
echo "remoteStatsdPromBridge: $STATSD_POD_IP"
echo "remoteTelemetryAddress: $TELEMETRY_POD_IP"
echo "remoteZipkinAddress: $ZIPKIN_POD_IP"

点击左侧的应用目录,在右侧选中ack-istio-remote,在打开的页面中选择命名空间 istio-system,并点击参数, 将这些信息填充到参数配置中进行定制化安装:

  .....
  envoyStatsd:
    enabled: false
    host: "$remoteStatsdPromBridge"
# Remote Istio endpoints. Can be hostnames or IP addresses
# The Pilot address is required. The others are optional.
remotePilotAddress: "$remotePilotAddress"
remotePolicyAddress: "$remotePolicyAddress"
remoteTelemetryAddress: "$remoteTelemetryAddress"
remoteZipkinAddress: "$remoteZipkinAddress"

安装示例到集群Istio-control-plane

首先通过如下命令行或者控制台创建命名空间 bookinfo, 并部署我们修改之后的应用。在这个修改后的版本中去掉了details组件,并定义了ingressgateway

本示例中涉及到的文件可以从 这里 获取到。

kubectl create ns bookinfo

kubectl label namespace bookinfo istio-injection=enabled
kubectl apply -n bookinfo -f ./bookinfo/bookinfo-without-details.yaml
kubectl apply -n bookinfo -f ./bookinfo/bookinfo-gateway.yaml

基于官方示例修改的部署,其中除了details组件运行在安装Istio本地控制平面的Kubernetes集群Istio-control-plane中,而details组件运行在另外一个Kubernetes集群Istio-remote-1中:
图片.png

正常运行之后,通过ingressgateway暴露的地址访问/productpage页面,效果应该如下所示,details部分应该不能正常显示(因为此时details组件还没有安装到集群Istio-remote-1并加入到同一网格中):
图片.png

远程集群配置

Istio 控制平面需要访问网格中的所有集群,来完成服务发现的目的。下面描述了如何在远程集群中创建一个 Service account,并赋予它必要的 RBAC 权限;后面还会使用这个 Service account 的凭据为远程集群生成一个 kubeconfig 文件,这样就可以访问远程集群了。

下面的过程应该在每一个要加入到服务网格中的集群上执行。这个过程需要对应集群的管理员用户来完成。运行命令 generate-kubeconfig.sh,参数为描述所在集群的唯一标示:

 ./generate-kubeconfig.sh myremote1

完成这些步骤之后,就在当前目录中创建了远程集群的 kubeconfig 文件。集群的文件名和原始的 kubeconfig 集群名称一致。

控制平面集群配置

在运行 Istio 控制平面的集群上为每个远程集群创建一个 Secret:

 ./create-secret.sh myremote1

安装示例到集群Istio-remote-1

同样的步骤,安装示例中 details 部分到集群Istio-remote-1,YAML文件可以从 这里 获取到。

 kubectl apply -n bookinfo -f ./bookinfo/bookinfo-details.yaml

之后,details 服务将会被注册到控制平面中,可以查看 {pilot-ipAddress}:8080/v1/registration 返回结果是否包含 details服务:

图片.png

再次访问/productpage页面,效果应该如下所示,details部分应该可以正常显示:
图片.png

总结

本文通过一个官方示例来重点介绍在阿里云容器服务上如何基于Istio实现多Kubernetes集群上的应用服务混合编排。你可以看到在 一个 Kubernetes 集群上安装 Istio 控制平面,然后Istio连接了2个 Kubernetes 集群之后,就会生成一个跨越多个 Kubernetes 集群的网格网络。

欢迎大家使用阿里云上的容器服务,快速搭建微服务的开放治理平台Istio,比较简单地集成到自己项目的微服务开发中。

相关实践学习
Docker镜像管理快速入门
本教程将介绍如何使用Docker构建镜像,并通过阿里云镜像服务分发到ECS服务器,运行该镜像。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
2月前
|
存储 Kubernetes Docker
容器服务ACK常见问题之阿里云控制台进不去了如何解决
容器服务ACK(阿里云容器服务 Kubernetes 版)是阿里云提供的一种托管式Kubernetes服务,帮助用户轻松使用Kubernetes进行应用部署、管理和扩展。本汇总收集了容器服务ACK使用中的常见问题及答案,包括集群管理、应用部署、服务访问、网络配置、存储使用、安全保障等方面,旨在帮助用户快速解决使用过程中遇到的难题,提升容器管理和运维效率。
|
9天前
|
运维 Serverless API
Serverless 应用引擎产品使用之在阿里云函数计算中,容器运行过程中的最大内存使用量获取如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
32 2
|
10天前
|
运维 IDE Serverless
Serverless 应用引擎产品使用之阿里函数计算中,阿里云容器镜像服务(Container Registry)中创建自定义镜像,然后将其部署到FC上如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
26 0
|
12天前
|
人工智能 边缘计算 Kubernetes
阿里云边缘容器云帮助AI推理应用快速落地
2024全球分布式云大会·北京站,阿里云徐若晨演讲内容分享
22 0
|
14天前
|
弹性计算 运维 Kubernetes
阿里云轻量应用服务器与轻量容器服务简介与区别及收费标准参考
轻量应用服务器是深受个人和普通企业用户亲耐的一款轻量级云服务器产品,提供精品应用一键部署,支持一站式的域名、网站、安全、运维、应用管理等服务,极大优化搭建简单应用的体验,降低了入门级用户使用云计算产品的门槛。轻量容器服务是专为学生、个人开发者等用户打造的轻量级容器服务,帮助您在云上快速了解容器和Kubernetes(简称K8s)相关的基础概念和轻松进行入门实践。本文为大家介绍一下阿里云轻量应用服务器与轻量容器服务的区别以及收费标准,以供参考。
阿里云轻量应用服务器与轻量容器服务简介与区别及收费标准参考
|
22天前
|
边缘计算 运维 监控
阿里云超大规模边缘容器云助力应用全球化部署
第十四届亚太内容分发大会,阿里云邓茜演讲内容分享
27 0
|
2月前
|
弹性计算 缓存 Kubernetes
什么是阿里云弹性容器实例?弹性容器实例优势及应用场景介绍
弹性容器实例是阿里云的云服务器产品,使用弹性容器实例之后,用户无需管理底层 ECS 服务器,只需要提供打包好的镜像,即可运行容器,与阿里云容器服务无缝对接并仅为容器实际运行消耗的资源付费。本文介绍了阿里云弹性容器实例的、功能特性、产品优势及应用场景。
什么是阿里云弹性容器实例?弹性容器实例优势及应用场景介绍
|
容器 Perl 监控
阿里云Kubernetes平台构建和管理实践(下)
阿里云智能容器平台解决方案架构师徐征讲解阿里云Kubernetes平台构建和管理实践,徐征主要从事帮助企业在面向云原生的应用转型的过程中提供解决方案和相应的工作。
3222 0
|
容器 Kubernetes Perl
阿里云Kubernetes平台构建和管理实践(上)
阿里云智能容器平台解决方案架构师徐征讲解阿里云Kubernetes平台构建和管理实践,徐征主要从事帮助企业在面向云原生的应用转型的过程中提供解决方案和相应的工作。
10738 0
|
12天前
|
运维 Kubernetes 监控
Kubernetes 集群的持续性能优化实践
【4月更文挑战第26天】 在动态且不断增长的云计算环境中,维护高性能的 Kubernetes 集群是一个挑战。本文将探讨一系列实用的策略和工具,旨在帮助运维专家监控、分析和优化 Kubernetes 集群的性能。我们将讨论资源分配的最佳实践,包括 CPU 和内存管理,以及集群规模调整的策略。此外,文中还将介绍延迟和吞吐量的重要性,并提供日志和监控工具的使用技巧,以实现持续改进的目标。

相关产品

  • 容器计算服务
  • 容器服务Kubernetes版