Istio简介及基于ACK安装Istio

简介: 了解服务网格开源产品Istio,使用阿里云ACK安装Istio过程

Istio就是Service Mesh的落地实现.

1. Istio的功能

  1. 负载均衡,服务发现
  2. 故障恢复,指标收集和监控
  3. A/B测试,灰度发布
  4. 限流,访问控制和端到端认证

2. Istio的架构


架构图:


  1. 数据平面: 数据平面由一组sidecar方式部署的智能代理(Envoy)节点组成,与每一个微服务节点共存,只负责工作
  1. 可以看到架构图上是Proxy,并不是Envoy, 其实Proxy是在Envoy的基础上包裹了一层的代理层,因为Envoy是使用C++编写的代理,但是Istio大部分都是使用Go编写的,不同语言通信上可能存在问题,所以在Envoy的基础上包裹一层.
  1. 控制平面: 相当于一个控制台的作用,单独部署于微服务集群之外,用于控制/配置数据平面
  1. Mixer:
  1. 实施控制平面的策略,并收集遥测数据;
  2. Istio独有的架构.
  1. Pilot:
  1. 提供服务发现功能
  2. 流量管理(超时/重试/熔断)
  3. 转换路由规则(将高级流控路由规则转换为Envoy可以识别的配置)
  1. Citadel:
  1. 身份和凭证管理
  2. 微服务和最终用户身份验证,认证为双向认证,不光是客户端到服务端的认证,也提供服务端到客户端的认证.
  3. 对未加密流量进行加密
  4. 基于角色的访问控制(RABC)
  1. Galley
  1. Istio的API server
  2. 验证用户编写的API配置
  3. 将接管Istio,获取配置,处理和分配组件.

3. Istio代码结构

github地址: https://github.com/istio/istio

The Istio project is divided across a few GitHub repositories:

  • istio/api. This repository defines component-level APIs and common configuration formats for the Istio platform.
  • istio/community. This repository contains information on the Istio community, including the various documents that govern the Istio open source project.
  • istio/istio. This is the main code repository. It hosts Istio's core components, install artifacts, and sample programs. It includes:
  • istioctl. This directory contains code for theistioctlcommand line utility.
  • operator. This directory contains code for theIstio Operator.
  • pilot. This directory contains platform-specific code to populate theabstract service model, dynamically reconfigure the proxies when the application topology changes, as well as translaterouting rulesinto proxy specific configuration.
  • security. This directory containssecurityrelated code, including Citadel (acting as Certificate Authority), citadel agent, etc.
  • istio/proxy. The Istio proxy contains extensions to the Envoy proxy (in the form of Envoy filters) that support authentication, authorization, and telemetry collection.

istio除了主库之外,还分散有其他库,比如架构中说到的proxy,就是最后一个库

可以看到istio的代码都是由Go编写的.

4. 基于ACK安装Istio

基于阿里云的容器服务k8s简称ACK,安装Istio,记录安装全过程

首先,需要登陆阿里云账号,找到ACK产品开通该服务,开通是免费的

4.1 创建ACK集群

其实就是创建k8s集群,阿里云提供了一键式创建K8s集群的能力

总结下来就是 买买买!!!

最低配置如上

注意: 开放公网ip

4.2 搭建bookinfo服务

Istio提供了示例程序,我们就用示例程序之一bookinfo来做应用部署

架构图:

4.2.1 下载示例程序

地址: https://github.com/zhangyao-zy/istio/tree/master/samples/bookinfo

4.2.2 安装示例程序镜像

我们要安装的配置文件有两个:

  1. bookinfo.yml 位于bookinfo/platform/kube/下
  2. bookinfo-gateway.yaml 位于 bookinfo/networking/下

4.2.2.1 配置namespace自动加注istio

kubectl label namespace default istio-injection=enabled

其实istio默认每个命名空间都会设置该参数

该参数的含义在于将会设置namespace下的所有pod都会自动注入sidecar

4.2.2.2 安装 bookinfo.yml

kube安装bookinfo.yml

kubectl apply -f bookinfo.yml

等待安装完成

# 查看pod/svc安装进度

kubectl get pod/svc -A

安装完成后可以找一个pod看下,会发现每一个pod里都多部署了一个容器,那就是网络代理

kubectl describe pod [pod名]


4.2.2.3 测试k8s内部调用

测试在pod内部调用微服务接口,看能否调用成功

kubeclt exec -it $(kubectl get pod -l app=ratings -o jsonpath='{.items[0].metadata.name}') -c ratings --curl productpage:9080/productpage | grep -o "<title>.*</title>"

进入ratings的容器,调用api,看是否能成功获取productpage页面.

4.2.2.4 安装bookinfo-gateway.yml

kubectl apply -f bookinfo-gateway.yml

安装完成后就可以通过公网访问bookinfo服务了

gateway其实就是k8s的ingress,底层是一个nginx,提供了k8s对外访问的能力


4.2.2.5 测试公网访问

# 获取gateway的对外暴露ip和端口 -n指定命名空间

kubectl get svc istio-ingressgateway -n instio-system

拿到ip端口后就可以通过公网ip和端口访问了

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
6天前
|
Kubernetes 应用服务中间件 nginx
二进制安装Kubernetes(k8s)v1.32.0
本指南提供了一个详细的步骤,用于在Linux系统上通过二进制文件安装Kubernetes(k8s)v1.32.0,支持IPv4+IPv6双栈。具体步骤包括环境准备、系统配置、组件安装和配置等。
86 10
|
1月前
|
Kubernetes Ubuntu Linux
我应该如何安装Kubernetes
我应该如何安装Kubernetes
|
2月前
|
Kubernetes Ubuntu Docker
从0开始搞K8S:使用Ubuntu进行安装(环境安装)
通过上述步骤,你已经在Ubuntu上成功搭建了一个基本的Kubernetes单节点集群。这只是开始,Kubernetes的世界广阔且深邃,接下来你可以尝试部署应用、了解Kubernetes的高级概念如Services、Deployments、Ingress等,以及探索如何利用Helm等工具进行应用管理,逐步提升你的Kubernetes技能树。记住,实践是最好的老师,不断实验与学习,你将逐渐掌握这一强大的容器编排技术。
279 1
|
2月前
|
Kubernetes Linux 开发工具
centos7通过kubeadm安装k8s 1.27.1版本
centos7通过kubeadm安装k8s 1.27.1版本
|
2月前
|
Kubernetes Docker 容器
rancher docker k8s安装(一)
rancher docker k8s安装(一)
48 2
|
2月前
|
Kubernetes 网络安全 容器
基于Ubuntu-22.04安装K8s-v1.28.2实验(一)部署K8s
基于Ubuntu-22.04安装K8s-v1.28.2实验(一)部署K8s
321 2
|
2月前
|
存储 Kubernetes 负载均衡
基于Ubuntu-22.04安装K8s-v1.28.2实验(四)使用域名访问网站应用
基于Ubuntu-22.04安装K8s-v1.28.2实验(四)使用域名访问网站应用
39 1
|
2月前
|
负载均衡 应用服务中间件 nginx
基于Ubuntu-22.04安装K8s-v1.28.2实验(二)使用kube-vip实现集群VIP访问
基于Ubuntu-22.04安装K8s-v1.28.2实验(二)使用kube-vip实现集群VIP访问
71 1
|
2月前
|
Kubernetes 监控 调度
k8s学习--kubernetes服务自动伸缩之垂直伸缩(资源伸缩)VPA详细解释与安装
k8s学习--kubernetes服务自动伸缩之垂直伸缩(资源伸缩)VPA详细解释与安装
118 1
|
3月前
|
Kubernetes 应用服务中间件 nginx
Kubernetes上安装Metallb和Ingress并部署应用程序
Kubernetes上安装Metallb和Ingress并部署nginx应用程序,使用LoadBalancer类型的KubernetesService
210 10
下一篇
DataWorks