官网: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