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

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: Mesh Expansion就是指部署在 Kubernetes 之中的 Istio 服务网格提供的一种将虚拟机或物理裸机集成进入到服务网格的方法。阿里云Kubernetes容器服务已经提供了Istio Mesh Expansion整合能力,本文通过一个官方示例来重点介绍如何使用Istio打通Kubernetes与阿里云ECS上的应用服务混合编排能力。

概述

在前面系列文章中已经介绍了Istio及其各个核心组件,详述了如何利用阿里云Kubernetes容器服务,快速搭建一套用于连接、管理以及保护微服务的开放平台Istio,为应用引入和配置多个相关服务;并且通过一个官方示例演示了如何部署应用到上述Istio环境中,演示了如何设置智能路由、分布式追踪以及Istio 的遥测数据收集、查询及可视化等功能。

回顾这个系列文章请参考:
阿里云Kubernetes Service Mesh实践进行时(1): Istio初体验
阿里云Kubernetes Service Mesh实践进行时(2): 通过示例深入Istio
阿里云Kubernetes Service Mesh实践进行时(3): 智能路由
阿里云Kubernetes Service Mesh实践进行时(4): 分布式追踪
阿里云Kubernetes Service Mesh实践进行时(5): 遥测数据收集、查询及可视化
阿里云Kubernetes Service Mesh实践进行时(6): 故障诊断与检测工具Weave Scope
阿里云Kubernetes Service Mesh实践进行时(7): 可观测性分析服务Kiali
阿里云Kubernetes容器服务Istio实践之集成日志服务Log Service
阿里云Kubernetes容器服务Istio实践之Sidecar自动注入

Istio从0.2开始就提供了一个称之为Mesh Expansion(中文大多称之为网格扩展)的功能。它的主要功能是可以把一些非Kubernetes服务(这些服务往往是运行在其他一些虚拟机或物理裸机中)集成到运行在Kubernetes集群上的Istio服务网格中。

阿里云Kubernetes容器服务已经提供了Istio Mesh Expansion整合能力,本文通过一个官方示例来重点介绍如何使用Istio打通Kubernetes与阿里云ECS上的应用服务混合编排能力。

网格扩展Mesh Expansion

简言之,Mesh Expansion就是指部署在 Kubernetes 之中的 Istio 服务网格提供的一种将虚拟机或物理裸机集成进入到服务网格的方法。

Mesh Expansion对于用户从遗留系统往云上迁移过程中有着非常重要的作用,在微服务体系结构中,无法要求所有的工作负载都在Kubernetes中运行,用户的一些应用程序可能在Kubernetes中运维,而另外一些可能在虚拟机或物理裸机中运行。

通过一套Istio控制面板就可以管理跨Kubernetes与虚拟机或物理裸机的若干服务。这样既能保证原有业务的正常运转,又能实现Kubernetes与虚拟机上的应用服务混合编排的能力。

准备Kubernetes集群并安装Istio

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

确保安装配置kubectl 能够连接上Kubernetes 集群。

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

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

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

安装示例到Kubernetes集群中

首先通过如下命令行或者控制台创建命名空间 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组件和数据库运行在Kubernetes之外的ECS上:
图片.png

正常运行之后,通过ingressgateway暴露的地址访问/productpage页面,效果应该如下所示,details部分应该不能正常显示:
图片.png

设置 Kubernetes

1) 首先,如果在安装Istio时没有为 Kube DNS、Pilot、Mixer 以及 Citadel 设置内部负载均衡器的话,则需要这一步进行设置,命令如下:

kubectl apply -f ./mesh-expansion.yaml

4个服务创建如下:
图片.png

2) 接着,生成 Istio 的 配置cluster.env与 DNS 配置文件kubedns,用来在虚拟机上进行配置。其中cluster.env文件包含了将要拦截的集群 IP 范围,kubedns文件则是让虚拟机上的应用能够解析集群的服务名称,然后被 Sidecar 劫持和转发。

命令如下:

./setupMeshEx.sh generateClusterEnvAndDnsmasq

生成的cluster.env配置文件的示例:
图片.png

生成的kubedns文件的示例:
图片.png

设置ECS

配置你自己的工作环境能与ECS虚机的授权,生成SSHkey并分发到ECS中。可以通过 ssh root@<ECS_HOST_IP> 确认是否可以成功连上ECS虚机。

生成公钥:

ssh-keygen -b 4096 -f ~/.ssh/id_rsa -N ""

为保证ECS能与Kubernetes网络上可通,可以将ECS与Kubernetes加入到同一个安全组。

阿里云容器服务针对ECS的设置步骤提供了较好的用户体验,通过运行以下脚本即可完成配置:

export SERVICE_NAMESPACE=default
./setupMeshEx.sh machineSetup root@<ECS_HOST_IP> 

检查运行的进程:

ps aux |grep istio

图片.png

Istio 认证使用的 Node Agent 健康运行:

sudo systemctl status istio-auth-node-agent

在ECS上运行服务

由前面示例部署图知道,有2个服务需要运行在ECS上,一个是Details服务,另一个是数据库服务。

在ECS上运行Details服务

通过以下命令模拟(仅仅是用Docker模拟而已)一个Details服务,运行在ECS上并暴露端口9080 。

docker pull istio/examples-bookinfo-details-v1:1.8.0
docker run -d -p 9080:9080 --name details-on-vm istio/examples-bookinfo-details-v1:1.8.0

配置 Sidecar 来拦截端口,这一配置存在于 /var/lib/istio/envoy/sidecar.env,使用环境变量ISTIO_INBOUND_PORTS 。

示例 (在运行服务的虚拟机上):

echo "ISTIO_INBOUND_PORTS=9080,8080" > /var/lib/istio/envoy/sidecar.env
systemctl restart istio

注册Details服务到Istio

查找虚拟机的 IP 地址,用来加入服务网格:

hostname -I

手工配置一个没有选择器的服务和端点,用来承载没有对应 Kubernetes Pod 的服务。例如在一个有权限且能够使用 istioctl 命令的服务器上,注册Details服务:

istioctl -n bookinfo register details 192.168.3.202 http:9080

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

将ratings服务切到数据库版本

默认ratings服务不访问数据库,通过如下命令更新版本,使得ratings服务切换到访问数据库的版本:

kubectl apply -f ./bookinfo/bookinfo-ratings-v2-mysql-vm.yaml
kubectl apply -f ./bookinfo/virtual-service-ratings-mysql-vm.yaml

此时访问/productpage页面,效果应该如下所示,ratings部分不能正常显示,下一步就是在ECS上搭建数据库服务,并将之加入到Istio中:
图片.png

在ECS上运行数据库服务

在虚拟机上运行 MariaDB,将其作为 ratings 服务的后端;并配置MariaDB可以支持远程访问。

apt-get update && apt-get install -y mariadb-server
sed -i 's/127\.0\.0\.1/0\.0\.0\.0/g' /etc/mysql/mariadb.conf.d/50-server.cnf
sudo mysql
# 授予 root 权限
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;
quit;
sudo systemctl restart mysql

在虚拟机上把初始化 ratings 数据库。

curl -q https://raw.githubusercontent.com/istio/istio/master/samples/bookinfo/src/mysql/mysqldb-init.sql | mysql -u root -ppassword

为了更清晰的观察 Bookinfo 应用在输出方面的差异,可以用下面的命令来修改评级记录,从而生成不同的评级显示:

mysql -u root -ppassword test -e "select * from ratings;"
mysql -u root -ppassword test -e  "update ratings set rating=2;select * from ratings;"

注册数据库服务到Istio

配置 Sidecar 来拦截端口,这一配置存在于 /var/lib/istio/envoy/sidecar.env,使用环境变量ISTIO_INBOUND_PORTS 。

示例 (在运行服务的虚拟机上):

echo "ISTIO_INBOUND_PORTS=3306,9080,8080" > /var/lib/istio/envoy/sidecar.env
systemctl restart istio

同样地,在一个有权限且能够使用 istioctl 命令的服务器上,注册数据库服务:

istioctl -n bookinfo register mysqldb 192.168.3.202 3306

经过这个步骤,Kubernetes Pod 和其他网格扩展包含的服务器就可以访问运行于这一服务器上的数据库服务了。

此时访问/productpage页面,效果应该如下所示,detailsratings 部分均能正常显示,而且这2个服务都是来自于ECS:

图片.png

总结

阿里云Kubernetes容器服务已经提供了Istio Mesh Expansion整合能力,本文通过一个官方示例来重点介绍如何使用Istio打通Kubernetes与阿里云ECS上的应用服务混合编排能力。

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

相关实践学习
巧用云服务器ECS制作节日贺卡
本场景带您体验如何在一台CentOS 7操作系统的ECS实例上,通过搭建web服务器,上传源码到web容器,制作节日贺卡网页。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
1天前
|
存储 机器学习/深度学习 人工智能
2025年阿里云GPU服务器租用价格、选型策略与应用场景详解
随着AI与高性能计算需求的增长,阿里云提供了多种GPU实例,如NVIDIA V100、A10、T4等,适配不同场景。2025年重点实例中,V100实例GN6v单月3830元起,适合大规模训练;A10实例GN7i单月3213.99元起,适用于混合负载。计费模式有按量付费和包年包月,后者成本更低。针对AI训练、图形渲染及轻量级推理等场景,推荐不同配置以优化成本和性能。阿里云还提供抢占式实例、ESSD云盘等资源优化策略,支持eRDMA网络加速和倚天ARM架构,助力企业在2025年实现智能计算的效率与成本最优平衡。 (该简介为原文内容的高度概括,符合要求的字符限制。)
|
3天前
|
存储 弹性计算 人工智能
2025年阿里云企业云服务器ECS选购与配置全攻略
本文介绍了阿里云服务器的核心配置选择方法论,涵盖算力需求分析、网络与存储设计、地域部署策略三大维度。针对不同业务场景,如初创企业官网和AI模型训练平台,提供了具体配置方案。同时,详细讲解了购买操作指南及长期运维优化建议,帮助用户快速实现业务上云并确保高效运行。访问阿里云官方资源聚合平台可获取更多最新产品动态和技术支持。
|
5天前
|
弹性计算 JavaScript 前端开发
一键安装!阿里云新功能部署Nodejs环境到ECS竟然如此简单!
Node.js 是一种高效的 JavaScript 运行环境,基于 Chrome V8 引擎,支持在服务器端运行 JavaScript 代码。本文介绍如何在阿里云上一键部署 Node.js 环境,无需繁琐配置,轻松上手。前提条件包括 ECS 实例运行中且操作系统为 CentOS、Ubuntu 等。功能特点为一键安装和稳定性好,支持常用 LTS 版本。安装步骤简单:登录阿里云控制台,选择扩展程序管理页面,安装 Node.js 扩展,选择实例和版本,等待创建完成并验证安装成功。通过阿里云的公共扩展,初学者和经验丰富的开发者都能快速进入开发状态,开启高效开发之旅。
|
7天前
|
弹性计算 JavaScript 前端开发
一键安装!阿里云新功能部署Nodejs环境到ECS竟然如此简单!
一键安装!阿里云新功能部署Nodejs环境到ECS竟然如此简单!
一键安装!阿里云新功能部署Nodejs环境到ECS竟然如此简单!
|
1天前
|
存储 人工智能 弹性计算
2025年阿里云企业高性能云服务器租用价格与选型详解
随着企业数字化转型,阿里云于2025年推出多款高性能云服务器实例,涵盖计算、通用和内存密集型场景。文章分析了企业选择云服务器的核心要点,包括明确业务需求(如计算密集型任务推荐计算型实例)、性能与架构升级(如第八代实例性能提升20%),以及第九代实例支持AI等高算力需求。同时提供了配置价格参考和成本优化策略,助力企业实现效率与成本的最优平衡。
|
1天前
|
机器学习/深度学习 存储 人工智能
2025年阿里云GPU服务器的租赁价格与选型指南
随着AI、深度学习等领域的发展,GPU服务器成为企业及科研机构的核心算力选择。阿里云提供多种GPU实例类型(如NVIDIA V100、A100等),涵盖计算型、共享型和弹性裸金属等,满足不同场景需求。本文详解2025年阿里云GPU服务器的核心配置、价格策略及适用场景,帮助用户优化选型与成本控制,实现高效智能计算。
|
1天前
|
机器学习/深度学习 存储 弹性计算
阿里云gpu云服务器租用价格:最新收费标准及活动价格参考
阿里云gpu云服务器多少钱?A10卡GN7i GPU云服务器32核188G3213.99/1个月起,V100卡GN6v GPU云服务器8核32G3830.00/1个月起,阿里云GPU云服务器是基于GPU应用的计算服务,多适用于视频解码,图形渲染,深度学习,科学计算等应用场景,该产品具有超强计算能力、网络性能出色、购买方式灵活、高性能实例存储( GA1和GN5特有)等特点。下面小编来介绍下阿里云gpu云服务器最新的收费标准及活动价格。
|
4天前
|
存储 人工智能 并行计算
2025年阿里云弹性裸金属服务器架构解析与资源配置方案
🚀 核心特性与技术创新:提供100%物理机性能输出,支持NVIDIA A100/V100 GPU直通,无虚拟化层损耗。网络与存储优化,400万PPS吞吐量,ESSD云盘IOPS达100万,RDMA延迟<5μs。全球部署覆盖华北、华东、华南及海外节点,支持跨地域负载均衡。典型应用场景包括AI训练、科学计算等,支持分布式训练和并行计算框架。弹性裸金属服务器+OSS存储+高速网络综合部署,满足高性能计算需求。
|
4天前
|
机器学习/深度学习 人工智能 开发者
DeepSeek服务器繁忙?拒绝稍后再试!基于阿里云PAI实现0代码一键部署DeepSeek-V3和DeepSeek-R1大模型
阿里云PAI平台支持零代码一键部署DeepSeek-V3和DeepSeek-R1大模型,用户可轻松实现从训练到部署再到推理的全流程。通过PAI Model Gallery,开发者只需简单几步即可完成模型部署,享受高效便捷的AI开发体验。具体步骤包括开通PAI服务、进入控制台选择模型、一键部署并获取调用信息。整个过程无需编写代码,极大简化了模型应用的门槛。
101 7
|
5天前
|
弹性计算 运维 网络安全
阿里云轻量应用服务器产品解析与搭建个人博客网站教程参考
轻量应用服务器(Simple Application Server)作为阿里云面向单机应用场景推出的云服务器产品,以其一键部署、一站式管理、高性价比等特性,深受个人开发者、中小企业及入门级用户的喜爱。本文将全面解析阿里云轻量应用服务器的产品优势、应用场景、使用须知,以及使用轻量应用服务器搭建个人博客网站的详细教程,帮助用户更好地了解和使用这一产品。

相关产品

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