Istio

在这里插入图片描述

三. 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 部署过程,可以得到 /root/istio-1.13.2/samples/multicluster 目录信息

cd /root/istio-1.13.2/samples/multicluster
./gen-eastwest-gateway.sh --mesh mesh1 --cluster cluster1 --network network1 | istioctl install -y -f -[root@lonely ~/istio-1.13.2/samples/multicluster]# kubectl  -n istio-system  get po |grep eastwestgateway
istio-eastwestgateway-56dcd6468d-nhbbc   1/1     Running   0          40m

(二). 架构

  • 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:defaultdemoemptyexternalminimalopenshiftpreviewremote# 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 label namespace default istio-injection=enabledkubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml[root@master-docker-247.19 ~/istio-1.13.0]# kubectl get po
NAME                              READY   STATUS    RESTARTS   AGE
details-v1-79f774bdb9-5dm4z       2/2     Running   0          5m20s
productpage-v1-6b746f74dc-4jb9k   2/2     Running   0          5m18s
ratings-v1-b6994bb9-hncrp         2/2     Running   0          5m20s
reviews-v1-545db77b95-49rp7       2/2     Running   0          5m19s
reviews-v2-7bf8c9648f-ppllc       2/2     Running   0          5m19s
reviews-v3-84779c7bbc-pt268       2/2     Running   0          5m19s
# 等待全部pod启动成功之后在进行下一步# 检查返回的页面标题来验证应用是否已在集群中运行,并已提供网页服务:
[root@master-docker-247.19 ~/istio-1.13.0]# kubectl exec "$(kubectl get pod -l app=ratings -o jsonpath='{.items[0].metadata.name}')" -c ratings -- curl -sS productpage:9080/productpage | grep -o "<title>.*</title>"
<title>Simple Bookstore App</title>kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml# 确保配置文件没有问题
[root@master-docker-247.19 ~/istio-1.13.0]# istioctl analyze
✔ No validation issues found when analyzing namespace: default.kubectl get svc istio-ingressgateway -n istio-system
NAME                   TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)                                                                      AGE
istio-ingressgateway   LoadBalancer   10.108.24.124   <pending>     15021:31879/TCP,80:30862/TCP,443:32166/TCP,31400:30364/TCP,15443:32477/TCP   29m# 由于环境中没有外部负载均衡器,我们就选择一个节点端口来代替。
# 设置入站的端口
export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].nodePort}')
export SECURE_INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="https")].nodePort}')
export INGRESS_HOST=172.164.100.45      # worker节点的IP# 您需要创建防火墙规则,以允许 TCP 流量发送到 ingressgateway 服务地端口。 运行下面的命令,以允许 HTTP 端口或 HTTPS 端口的流量,或两者的流量都允许。
export INGRESS_HOST=$(kubectl get po -l istio=ingressgateway -n istio-system -o jsonpath='{.items[0].status.hostIP}')# 设置环境变量 GATEWAY_URL
export GATEWAY_URL=$INGRESS_HOST:$INGRESS_PORT# 确保 IP 地址和端口均成功地赋值给了环境变量
[root@master-docker-247.19 /opt]# echo "$GATEWAY_URL"
172.164.100.45:31111# 获取 Bookinfo 应用的外部访问地址,浏览器访问确认 Bookinfo 应用的产品页面是否可以打开
[root@master-docker-247.19 /opt]# echo "http://$GATEWAY_URL/productpage"
http://172.164.100.45:31111/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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/421572.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI相关资料

文心一格收费,有免费额度 通义万相_AI创意作画_AI绘画_人工智能-阿里云 AI AIchatOS 即时 AI - 生成式图像创作及 UI 设计工具 Framer — The internet is your canvas

Vuex的基础使用

在使用之前要先了解Vuex的组成结构&#xff0c;跟对应的使用关系。 在上图的结构图中可以看到四个组成部分&#xff0c;首先是Components&#xff08;组件&#xff09;、Actions&#xff08;行动&#xff09;、Mutations&#xff08;变化&#xff09;、state&#xff08;状态/数…

2023.1.21 关于 Redis 主从复制详解

目录 引言 单点问题 分布式系统 主从模式 配置 Redis 主从结构 断开主从关系 切换主从关系 补充知识点一 只读 网络延迟 拓扑结构 一主一从 一主多从 树形主从结构 主从复制的基本流程 数据同步 replicationid offset pzync 运行流程 具体流程 补充知识点二…

GNU Radio简介及流程图搭建

文章目录 前言一、GNU Radio 是什么&#xff1f;二、GNU Radio 安装三、搭建第一个流程图1、创建 GRC 文件2、添加块3、运行流程图 前言 欢迎来到无线通信的世界&#xff0c;初步接触 GNU Radio&#xff0c;对其学习进行一个记录。 一、GNU Radio 是什么&#xff1f; GNU Rad…

无偿!全代码!增删改查+redis+token+mybatisplus 完整代码+讲解适合大一大二以及新手小白 Controller层讲解

这是一个简单的基础的且有不足的代码1.设置了一个管理员账号用于登录页面&#xff08;用到简单的redis和token&#xff09;2.增删改查&#xff08;批量or单个删除&#xff09;患者信息3.可更改患者身体状况4.excl表导出患者总体信息4.计算不同地区的患者情况并用前端以图标形式…

校园疫情防控信息管理系统的设计与实现-计算机毕业设计源码12057

摘 要 如今计算机行业的发展极为快速&#xff0c;搭载于计算机软件运行的数据库管理系统在各行各业得到了广泛的运用&#xff0c;其在数据管理方面具有的准确性和高效性为大中小企业的日常运营提供了巨大的帮助。自从2020年新冠疫情爆发以来&#xff0c;防疫成了社会关注的重中…

结构体的内存对齐(计算题常考点)

许久不见我考完试回来啦&#xff0c;让我们接着将结构体进行到底&#xff01; 目录 结构体对齐的意义&#xff1a; 结构体对齐的实现&#xff1a; 对齐规则&#xff1a; 训练&#xff1a; 好到这里误区来了&#xff1a; 总结&#xff1a; 往期回顾&#xff1a; 下期预告&…

docker使用http_proxy配置代理

钢铁知识库&#xff0c;一个学习python爬虫、数据分析的知识库。人生苦短&#xff0c;快用python。 在内网服务器中&#xff0c;docker经常需要下载拉取镜像&#xff0c;但由于没有网络要么只能手动导入镜像包&#xff0c;又或者通过http_proxy代理到其它服务器下载。 解决方法…

Elasticsearch+Kibana 学习记录

文章目录 安装Elasticsearch 安装Kibana 安装 Rest风格API操作索引基本概念示例创建索引查看索引删除索引映射配置&#xff08;不配置好像也行、智能判断&#xff09;新增数据随机生成ID自定义ID 修改数据删除数据 查询基本查询查询所有&#xff08;match_all&#xff09;匹配查…

腾讯产品面试题:为什么水果店不卖蔬菜,蔬菜店却卖水果?

嗨&#xff0c;亲爱的小伙伴们&#xff01;小米又来啦~ 今天我要和大家聊一聊一个超级有趣的话题——腾讯产品面试题&#xff1a;为什么水果店不卖蔬菜&#xff0c;蔬菜店却卖水果&#xff1f;这是不是让你脑洞大开呀&#xff1f;&#xff01;不过别着急&#xff0c;小米会给你…

【Leetcode】2788. 按分隔符拆分字符串

文章目录 题目思路代码 题目 题目链接 给你一个字符串数组 words 和一个字符 separator &#xff0c;请你按 separator 拆分 words 中的每个字符串。 返回一个由拆分后的新字符串组成的字符串数组&#xff0c;不包括空字符串 。 注意 separator 用于决定拆分发生的位置&#…

预防校园火灾守护校园安全:巡检系统的使命与责任

校园安全的重要性 校园场所因人员密集而具有特殊的安全风险&#xff0c;一旦发生事故往往会引发严重后果。近日方城一小学发生的火灾造成了13人遇难&#xff0c;这样的悲剧再次提醒我们&#xff0c;生命安全绝对不能忽视。因此&#xff0c;预防校园火灾是每一个校园管理者和师生…