Istio

发布时间:2024年01月18日

在这里插入图片描述

三. Istio

官网

Github

  • Connect 连接: 服务发现、负载均衡、重试、路由、故障注入、重定向、A/B测试、金丝雀发布
  • Secure 安全方面: 认证、通道加密、访问授权
  • Control 控制: 访问控制、限速、配额管理、服务计费
  • Observe 观察: 链路跟踪、监控、日志搜集、可视化

(一). 概念

  • Google 、 IBM 和 Lyft 于2017年5月24日发布0.1版本, 2018年7月31日晚24点,Istio 推出1.0正式版本,并表示可用于生产环境
  • 部署最好选择最新但是不要太靠前的版本用于生产, 1.5之前版本和1.5之后的架构是不一样的(1.5进行了架构重构)

1. gateway

  • Kubernetes 环境中,Kubernetes Ingress用于配置需要在集群外部公开的服务。但是在 Istio 服务网格中,更好的方法是使用新的配置模型,即 Istio Gateway,Gateway 允许将 Istio 流量管理的功能应用于进入集群的流量,gateway 分为两种,分别是 Ingress-gatewayEgress-gateway

(二). 架构

  • Istio 分为 Data plane(数据平面)和 Control plane(控制平面)

1. Data plane

  • 数据平面的 Sidecar 代理可以调节和控制应用服务之间所有的网络通信,当 pod 被 istio 注入后,就被纳入到服务网格中,每个应用服务 Pod 启动时会伴随启动 2个容器 istio-initistio-proxy
    • istio-init: 该容器主要功能是初始化 Pod 网络和对 Pod 设置 iptable 规则,拦截我们所有的入站(inbound)和出站(outbound)流量, 然后把所有的流量导入到 istio-proxy ,让他来处理流量, 而 istio-proxy 定义了规则, 就实现了流量的控制, 设置完成后自动结束
    • istio-proxy: 该容器会启动两个进程:pilot-agent 以及 Sidecar 代理(Istio使用的是 Envoy ),pilot-agent 的作用是同步管理数据,启动并管理 Sidecar 代理服务进程,上报遥测数据,Sidecar 代理则根据管理策略完成流量管控、生成遥测数据
    • Envoy: 可以理解为充当 nginx 的角色,做为proxy代理,负责接管pod的入口和出口流量, Envoy 代理是唯一与数据通信交互的Istio组件,使用 C++ 开发,性能较高,EnvoyNginx 对比 (后面会对Envoy做详细介绍)

2. Control plane

1). Pilot
  • 负责在运行时配置代理, 实现xDS 协议
2). Citadel
  • 负责证书颁发和轮换
3). Gallery
  • 负责在 Istio 内验证、摄取、聚合、转换和分发配置

(三). 部署

官网

Github

Kubernetes 对应 Istio 版本

Kubernetes 版本:1.21.4

# Istioctl 下载地址
[root@lonely ~]# wget https://github.com/istio/istio/releases/download/1.13.2/istio-1.13.2-linux-amd64.tar.gz
[root@lonely ~]# tar xf istio-1.13.2-linux-amd64.tar.gz
[root@lonely ~]# cd istio-1.13.2
[root@lonely ~/istio-1.13.2]# ll
total 28
drwxr-x---  2 root root    22 Mar  9  2022 bin				# 运行文件
-rw-r--r--  1 root root 11348 Mar  9  2022 LICENSE
drwxr-xr-x  5 root root    52 Mar  9  2022 manifests		# 部署文件等
-rw-r-----  1 root root   880 Mar  9  2022 manifest.yaml
-rw-r--r--  1 root root  5866 Mar  9  2022 README.md
drwxr-xr-x 23 root root  4096 Mar  9  2022 samples			# 一些案例, 里面有 Kiali 部署的yaml文件(如下会说到)
drwxr-xr-x  3 root root    57 Mar  9  2022 tools			# 生成证书工具、命令自动补全等

[root@lonely ~/istio-1.13.2]# cp bin/istioctl /usr/local/bin/

# Istio profile
[root@lonely ~]# istioctl profile list
Istio configuration profiles:
    default
    demo
    empty
    external
    minimal
    openshift
    preview
    remote

# profile yaml文件所在位置
[root@lonely ~/istio-1.13.2/manifests]# ll profiles/
total 36
-rw-r--r-- 1 root root 4778 Mar  9  2022 default.yaml
-rw-r--r-- 1 root root 1836 Mar  9  2022 demo.yaml
-rw-r--r-- 1 root root  317 Mar  9  2022 empty.yaml
-rw-r--r-- 1 root root  590 Mar  9  2022 external.yaml
-rw-r--r-- 1 root root  216 Mar  9  2022 minimal.yaml
-rw-r--r-- 1 root root  504 Mar  9  2022 openshift.yaml
-rw-r--r-- 1 root root  747 Mar  9  2022 preview.yaml
-rw-r--r-- 1 root root  116 Mar  9  2022 remote.yaml


# 获取yaml,这里使用 demo profile
[root@lonely ~]# istioctl manifest generate --set profile=default > istio-kubernetes-default-manifest.yaml

# 生成默认模式(default)配置文件
[root@lonely ~]# istioctl profile dump >default-config.yaml

1. profile

  • 生产环境使用 default 模式
    • demo profile 会安装 ingressgateway、egressgateway、istio-pilot 等 istio 组件,同时会安装 grafana、istio-tracing、kiali、prometheus 等外部插件
核心组件/模式defaultdemominimalremoteemptypreview
说明适合生产仅供学习,不适合生产最小化安装
istio-egress gateway?
istio-ingress gateway???
istiod????
profile描述
default根据 IstioOperator API 的默认设置启动组件, 建议用于生产部署和 Multicluster Mesh 中的 Primary Cluster
demo这一配置具有适度的资源需求,旨在展示 Istio 的功能, 它适合运行 Bookinfo 应用程序和相关任务, 这是通过快速开始指导安装的配置, 此配置文件启用了高级别的追踪和访问日志,因此不适合进行性能测试, 也不适用生产
empty
external
minimal与默认配置文件相同,但只安装了控制平面组件。 它允许您使用 Separate Profile 配置控制平面和数据平面组件(例如 Gateway)
openshift
preview预览文件包含的功能都是实验性。这是为了探索 Istio 的新功能。不确保稳定性、安全性和性能(使用风险需自负)
remote配置 Multicluster Mesh 的 Remote Cluster

2. 安装

  • 默认会创建在 istio-system 名称空间,也会创建许多 CRD, 可以 kubectl get crd 查看,这些是为了创建 istio 功能的,还有 egress、ingress、istiod 的pod 和 deployment
# 也可以用获取的yaml文件进行部署和卸载
[root@lonely ~/istio-1.13.2]# istioctl install --set profile=demo
This will install the Istio 1.13.2 demo profile with ["Istio core" "Istiod" "Ingress gateways" "Egress gateways"] components into the cluster. Proceed? (y/N) y

[root@lonely ~/istio-1.13.2]# kubectl  -n istio-system get po
NAME                                    READY   STATUS    RESTARTS   AGE
istio-egressgateway-66fdd867f4-lg5pt    1/1     Running   0          4m14s
istio-ingressgateway-77968dbd74-8m45c   1/1     Running   0          4m14s
istiod-699b647f8b-xrn8b                 1/1     Running   0          5m18s

# 查看安装了什么
[root@lonely ~/istio-1.13.2]# istioctl version
client version: 1.13.2
control plane version: 1.13.2
data plane version: 1.13.2 (2 proxies)


# 卸载
istioctl manifest generate --set profile=demo | kubectl delete -f -

(四). 实践

涉及陌生的 Resource, 后面会详细介绍,先部署起来

kubectl create ns istio
kubectl label ns istio istio-injection=enabled
cd /root/istio-1.13.2/samples/bookinfo/platform/kube

[root@lonely ~/istio-1.13.2/samples/bookinfo/platform/kube]# ll
total 68
-rw-r--r-- 1 root root  914 Mar  9  2022 bookinfo-certificate.yaml
-rw-r--r-- 1 root root 1387 Mar  9  2022 bookinfo-db.yaml
-rw-r--r-- 1 root root 1409 Mar  9  2022 bookinfo-details-v2.yaml
-rw-r--r-- 1 root root 1519 Mar  9  2022 bookinfo-details.yaml
-rw-r--r-- 1 root root 1743 Mar  9  2022 bookinfo-ingress.yaml
-rw-r--r-- 1 root root 2009 Mar  9  2022 bookinfo-mysql.yaml
-rw-r--r-- 1 root root  988 Mar  9  2022 bookinfo-ratings-discovery.yaml
-rw-r--r-- 1 root root 1596 Mar  9  2022 bookinfo-ratings-v2-mysql-vm.yaml
-rw-r--r-- 1 root root 1825 Mar  9  2022 bookinfo-ratings-v2-mysql.yaml
-rw-r--r-- 1 root root 1927 Mar  9  2022 bookinfo-ratings-v2.yaml
-rw-r--r-- 1 root root 1519 Mar  9  2022 bookinfo-ratings.yaml
-rw-r--r-- 1 root root 1643 Mar  9  2022 bookinfo-reviews-v2.yaml
-rw-r--r-- 1 root root 7975 Mar  9  2022 bookinfo.yaml
-rwxr-xr-x 1 root root 1979 Mar  9  2022 cleanup.sh
-rw-r--r-- 1 root root 1026 Mar  9  2022 productpage-nodeport.yaml
-rw-r--r-- 1 root root  137 Mar  9  2022 README.md


# 部署 reviews-v{1,2,3}、details-v1、productpage-v1
kubectl apply -f bookinfo.yaml  -n istio

# 部署 details-v2
kubectl -n istio apply -f bookinfo-details-v2.yaml

# 部署 ratings(连接MongoDB)
kubectl -n istio apply -f bookinfo-ratings-v2.yaml

# 部署 ratings(连接Mysql)
kubectl -n istio apply -f bookinfo-ratings-v2-mysql.yaml

# 部署 ratings(连接Mysql-vm)
kubectl -n istio apply -f bookinfo-ratings-v2-mysql-vm.yaml

# MongoDB
kubectl -n istio apply -f bookinfo-db.yaml

# Mysql
kubectl -n istio apply -f bookinfo-mysql.yaml

# Mysql-vm,名称空间位vm的mysql
kubectl create ns vm
kubectl -n vm apply -f bookinfo-mysql.yaml

# 进入network相关目录
cd /root/istio-1.13.2/samples/bookinfo/networking

# 创建 gateway 和 virtualservices
kubectl -n istio apply -f bookinfo-gateway.yaml

# 创建 destinationrule
kubectl -n istio apply -f destination-rule-all.yaml

# 创建 virtualservice
kubectl -n istio apply -f virtual-service-all-v1.yaml
# 
[root@lonely ~/istio-1.13.2/samples/bookinfo/networking]# kubectl  -n istio-system get svc
NAME                   TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)                                                                      AGE
istio-egressgateway    ClusterIP      10.110.65.133    <none>        80/TCP,443/TCP                                                               5h47m
istio-ingressgateway   LoadBalancer   10.108.206.183   <pending>     15021:31228/TCP,80:32293/TCP,443:30606/TCP,31400:32273/TCP,15443:31398/TCP   5h47m
istiod                 ClusterIP      10.111.202.194   <none>        15010/TCP,15012/TCP,443/TCP,15014/TCP                                        5h48m


# 浏览器访问
http://172.164.100.44:32293/productpage

1. Istio crd

CRD说明
Gateway网关配置
VirtualServiceshttp、tcp、tls的路由、故障注入
DestinationRules目标规则、负债均衡、熔断、subset、基于地域负债均衡、tls等
Sidecar减少ingress、egress配置
authorizationpolicies权限
peerauthentications配置双向tls
requestauthentications配置jwt认证
workloadentries
workloadgroups
serviceentries服务条目
proxyconfigs代理的配置、并发和环境变量
wasmplugins
envoyfilters直接配置Envoy的配置规则,下发到Envoy并直接生效
istiooperators用于安装的
telemetries标签、测试等
kubectl get crd |grep istio

四. Kiali

官网

Kiali 和 Istio 对应版本

  • Kiali 为 Service Mesh 提供了一个观测的可视化平台
# 进入之前下载的Istio目录
cd /root/istio-1.13.2/samples/addons

[root@lonely ~/istio-1.13.2/samples/addons]# ll
total 280
drwxr-xr-x 2 root root    113 Mar  9  2022 extras
-rw-r--r-- 1 root root 245578 Mar  9  2022 grafana.yaml
-rw-r--r-- 1 root root   2533 Mar  9  2022 jaeger.yaml
-rw-r--r-- 1 root root  11826 Mar  9  2022 kiali.yaml
-rw-r--r-- 1 root root  14114 Mar  9  2022 prometheus.yaml
-rw-r--r-- 1 root root   5194 Mar  9  2022 README.md

# 部署
kubectl apply -f kiali.yaml
kubectl patch svc kiali -n istio-system -p '{"spec": {"type": "NodePort"}}'


[root@lonely ~/istio-1.13.2/samples/addons]# kubectl  -n istio-system  get svc |grep kiali
kiali                  NodePort       10.105.26.47     <none>        20001:32617/TCP,9090:30673/TCP    

# 浏览器 http://172.164.100.44:32617/
# 浏览器登录发现报错:
Could not fetch metrics: error in metric request_count: Post "http://prometheus.istio-system:9090/api/v1/query_range": dial tcp: lookup prometheus.istio-system on 10.96.0.10:53: no such host

# 解决,只部署 Prometheus 就可以
kubectl apply -f prometheus.yaml
kubectl apply -f grafana.yaml
kubectl apply -f jaeger.yaml
kubectl apply -f extras/zipkin.yaml
文章来源:https://blog.csdn.net/moon_naxx/article/details/135676090
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。