1. Istio 介绍

Istio 是由 Google、IBM 和 Lyft 开源的微服务管理、保护和监控框架。Istio 为希腊语,意思是”起航“。

Istio 使用功能强大的 Envoy 服务代理扩展了 Kubernetes,以建立一个可编程的、可感知的应用程序网络。

Istio 与 Kubernetes 和传统工作负载一起使用,为复杂的部署带来了标准的通用流量管理、遥测和安全性。

2. 下载 istio

以 CentOS7 为例

官方下载:https://github.com/istio/istio/releases/

截止写本文时,版本更新到 v1.18.0。

2.1. 版本的选择

https://istio.io/latest/zh/docs/releases/supported-releases/

v1.18.0 适合 k8s 1.24, 1.25, 1.26, 1.27。

根据你的 kubernetes 版本进行下载相应的 istio 版本。

cd /opt/src
wget https://github.com/istio/istio/releases/download/1.18.0/istio-1.18.0-linux-amd64.tar.gz

tar -zxvf istio-1.18.0-linux-amd64.tar.gz

cd istio-1.18.0

cp istio-1.18.0/bin/istioctl /usr/local/bin

# 查看版本
istioctl version

# 如果显示如下,则表示你未设置 KUBECONFIG 环境变量
unable to retrieve Pods: Get "http://localhost:8080/api/v1/namespaces/istio-system/pods?fieldSelector=status.phase%3DRunning&labelSelector=app%3Distiod": dial tcp [::1]:8080: connect: connection refused
1.18.0

# 设置 KUBECONFIG 后显示应该是这样
no running Istio pods in "istio-system" # 出现这一行表示你当前集群中还没有安装 istio
1.18.0

3. 安装 istio

自动注入边车模式:

istioctl install --set profile=demo -y

半自动注入边车模式

  • values.global.proxy.autoInject=disabled 设置非自动注入边车模式
istioctl install --set profile=demo --set values.global.proxy.autoInject=disabled -y

安装后再查看 version:

-> # istioctl version
client version: 1.18.0
control plane version: 1.18.0
data plane version: 1.18.0 (2 proxies)

设置 namespace 标签:

  • default 命名空间名称
kubectl label namespace default istio-injection=enabled --overwrite

查看 namespace 标签:

  • ISTIO-INJECTION 如果是 enabled 表示可以注入边车,disabled 表示不注入边车
# 查看
kubectl get namespace -L istio-injection

NAME                        STATUS   AGE     ISTIO-INJECTION
default                       Active    10m     enabled

4. 注入边车

查看 Injector 策略配置

kubectl -n istio-system get configmap istio-sidecar-injector -o jsonpath='{.data.config}' | grep policy:
policy: disabled  # 如果显示:enabled 则需要修改 configmap

4.1. 自动注入边车

默认安装时 values.global.proxy.autoInject=enabled,则新部署的 POD 会启动边车。

如果新部署的 pod 不允许带边车 sidecar,需要额外设置 label,标记不加载 sidecar

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
  labels:
    app: my-app
spec:
  replicas: 1
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
        labels:
            app: my-app
        annotations:
            sidecar.istio.io/inject: "false" # false 标记不加载 sidecar
    spec:
      containers:
      - name: my-app
        image: my-image:v1
        ports:
        - containerPort: 80

5. 手动注入边车

如果安装是设置 values.global.proxy.autoInject=disabled 则新部署的 POD 不会启动边车。

指定某应用加载 sidecar,需要设置 label 标签。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
  labels:
    app: my-app
spec:
  replicas: 1
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
        labels:
            app: my-app
        annotations:
            sidecar.istio.io/inject: "true" # true 标记加载 sidecar
    spec:
      containers:
      - name: my-app
        image: my-image:v1
        ports:
        - containerPort: 80

6. 关于作者

我的博客:https://yezihack.github.io

欢迎关注我的微信公众号【空树之空】,一日不学则面目可憎也,吾学也。

空树之空