官网:istio.io
下载isitoctl客户端:
cd /usr/local/src
# 下载
curl -L https://istio.io/downloadIstio | sh -
# 命令软链接
ln -s /usr/local/istio-1.17.2 /usr/local/istio
#export PATH="$PATH:/usr/local/istio/bin"
istio 目录是 Istio 控制面(Control Plane)的安装目录,其中包含了 Istio 的所有核心组件及配置文件。
具体来说
bin 包含 Istio 控制平面组件(例如 istioctl 工具)的可执行文件。目录中包含了一些 Istio 工具的二进制文件,例如 istioctl 和 pilot-agent。
manifests 目录中包含了 Istio 的 Kubernetes manifest 文件,这些文件定义了 Istio 控制面所需的各个 Kubernetes 资源对象,例如 Service、Deployment、ConfigMap 等等。这些文件可以用于在 Kubernetes 集群上部署 Istio 控制面。
samples 目录中包含了一些使用 Istio 实现常见应用程序模式的示例文件,例如 Bookinfo 应用程序示例。
tools 目录中包含了一些辅助 Istio 安装、配置和部署的脚本和工具。
LICENSE:Istio 软件的许可证。
manifest.yaml:Istio 所有 Kubernetes manifeset 的主文件。
README.md:提供 Istio 安装指南、版本说明、升级和其他重要信息
因此,可以认为 istio 目录是 Istio 控制面的数据目录,其中包含了 Istio 控制面所需的所有数据和文件。
列出可用的 Istio 配置文件(profile)
istioctl profile list
Istio configuration profiles:
ambient
default
demo
empty
external
minimal
openshift
preview
remote
ambient:适用于轻量级应用程序,该配置文件启用了最小量的 Istio 功能,并将剩余的功能留给 Kubernetes 和 Envoy 自己来处理。
default:这是 Istio 的默认配置文件,它旨在提供一组通用的配置选项,以便在不需要进行大量自定义的情况下使用 Istio。
demo:适用于演示和快速测试,该配置文件启用了所有功能并设置了较强的安全性和可观察性。
empty:该配置文件仅启用 Istio 的基本功能,并禁用所有其他功能。
external:适用于在 Istio 网格之外运行的服务。该配置文件启用了仅与 Istio Service Mesh 集成必需的功能。
minimal:这是一个非常精简的配置文件,适用于只需要少量 Istio 功能的环境。
openshift:专门针对 OpenShift 平台进行了优化的配置文件,包括特定于平台的插件和适当的默认值。
preview:提供一组实验性质的功能,以便用户尝试新功能并提供反馈。
remote:适用于远程 Istio 控制平面的配置文件,用于在 Kubernetes 集群之间进行多集群部署。
列出某一个配置档案的内容
istioctl profile dump default
istioctl profile dump default > /root/default.yml
部署isito控制平台
istioctl apply --set profile=default -y # 等default可以不用写
#istioctl apply -f default.yml -y
查看pods
这两个 Pod 分别是 Istio 中的核心组件:
istiod Pod:负责 Istio 的控制平面,包括服务发现、路由规则配置等。它还托管了 Istio 的 Web 控制台。
istio-ingressgateway Pod:Istio 入口网关,用于将外部流量引入到 Kubernetes 集群中,并为它们提供 Istio 服务网格中的功
能,比如流量管理、安全、追踪和可观察性等。
[root@k8s-master01 manifests]# kubectl get pods -n istio-system
NAME READY STATUS RESTARTS AGE
istio-ingressgateway-5555ccdc98-7dcnl 1/1 Running 0 8m46s
istiod-7fd9d6dd48-bfvtn 1/1 Running 0 10m
数据平面配置自动注入sidecar
数据平面会在对应命名空间的pod都会被自动注入sidcar
kubectl label namespace default istio-injection=enabled
kubectl get namespace default --show-labels
验证部署
istioctl verify-install -f /root/default.yml
部署istio集成的第三方组件
addons 目录是 Istio 服务网格的扩展组件目录,它包含了一些与 Istio 集成的第三方组件。其中:
extras: 包含额外的示例配置文件。
grafana.yaml: Istio 的监控组件 Grafana 的配置文件。
jaeger.yaml: 分布式跟踪系统 Jaeger 的配置文件。
kiali.yaml: Istio 的可观察性控制台 Kiali 的配置文件。
prometheus.yaml: Istio 的监控组件 Prometheus 的配置文件。
README.md: 对这个目录及其内容的简单描述文档。
这些组件可以帮助用户更好地管理和监控 Istio 中的服务,优化其性能并提高可靠性
cd /usr/local/istio/samples/addons
kubectl apply -f ./
kubectl get pods -n istio-system
kubectl get crds
kubectl api-resources --api-group=gateways.networking.istio.io
配置入口IP
配置负载均衡IP。这里我配置其中一个节点的IP作为入口
kubectl edit service istio-ingressgateway -n istio-system
...
26 spec:
27 allocateLoadBalancerNodePorts: true
28 clusterIP: 10.104.207.99
29 clusterIPs:
30 - 10.104.207.99
31 externalIPs: # 添加此行
32 - 10.0.7.21 # 添加此行,添加节点IP作为外部IP
...
kubectl get svc -n istio-system
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
grafana ClusterIP 10.109.189.80 <none> 3000/TCP 7d1h
istio-ingressgateway LoadBalancer 10.104.207.99 10.0.7.21 15021:32206/TCP,80:32556/TCP,443:30659/TCP 7d1h
istiod ClusterIP 10.101.20.17 <none> 15010/TCP,15012/TCP,443/TCP,15014/TCP 7d1h
jaeger-collector ClusterIP 10.101.109.55 <none> 14268/TCP,14250/TCP,9411/TCP 7d1h
kiali ClusterIP 10.105.149.248 <none> 20001/TCP,9090/TCP 7d1h
prometheus ClusterIP 10.96.192.40 <none> 9090/TCP 7d1h
tracing ClusterIP 10.102.68.189 <none> 80/TCP,16685/TCP 7d1h
zipkin ClusterIP 10.111.202.200 <none> 9411/TCP 7d1h
御载
istioctl x uninstall --purge# 卸载控制平面组件
调整网格级别控制平面的配置:支持基于已经部署调整配置
istioctl apply/install
部署档案对应存在Kubernetes原生格式的资源配置
istioctl manifest generate --set profile=demo | kubectl apply -f -
如果您看到一个业务容器旁边有一个Sidecar代理,那么这个代理很可能就是istio-proxy。
Istio系统组件:
控制平面:
istiod:
pilot, galley, citedal
部署方法:istioctl, istio operator, helm
数据平面:
Gateway:
istio-ingressgateway
istio-egressgateway
istio-eastwestgateway
Sidecar:
istio-proxy:二次开发的envoy
手工注入:istioctl kube-inject
自动注入:在目标namespace上设定label
istio-injection=enabled
部署:随微服务部署启用Sidecar自动注入
部署方法:
istioctl:手动
istio operator:部署Operator
IstioOperator CRD
helm
Charts