安装 Istio ambient mode

您可以使用 Alauda Service Mesh Operator 2.1.1 或更高版本,在 Alauda Container Platform 上以 ambient mode 部署 Istio。

前提条件

  • 必须安装 Alauda Container Platform Networking 的 Multus 插件,且 kube-ovn 版本需为 v4.1.5 或更高。
  • 已安装 Alauda Service Mesh Operator 2.1.1 或更高版本。
  • 由具有 cluster-admin 角色的集群管理员开启的有效 ACP CLI (kubectl) 会话。
  • 本地已安装 istioctl,以便执行以下操作步骤。

操作步骤

安装 Istio Container Network Interface (CNI)

  1. 创建 istio-cni 命名空间并添加标签 istio-discovery=enabled

    kubectl create namespace istio-cni
    kubectl label namespace istio-cni istio-discovery=enabled
  2. 创建名为 istio-cni.yaml 的 IstioCNI 资源:

    apiVersion: sailoperator.io/v1
    kind: IstioCNI
    metadata:
      name: default
    spec:
      namespace: istio-cni
      profile: ambient
      values:
        cni:
          cniConfDir: /etc/cni/multus/net.d
          excludeNamespaces:
            - istio-cni
            - kube-system
          ambient:
            reconcileIptablesOnStartup: true
    1. 必须将 profile 字段设置为 ambient
    2. spec.values.cni.ambient.reconcileIptablesOnStartup 设置为 truereconcileIptablesOnStartup 选项使 IstioCNI 智能体在 CNI 智能体启动时检测并修复已运行 ambient Pod 中不兼容的 iptables 规则,处理升级或规则漂移等场景。
  3. 应用 IstioCNI CR:

    kubectl apply -f istio-cni.yaml
  4. 等待 IstioCNI Pod 就绪:

    kubectl wait --for=condition=Ready istiocnis/default --timeout=3m

安装 Istio 控制平面

  1. 创建 istio-system 命名空间并添加标签 istio-discovery=enabled

    kubectl create namespace istio-system
    kubectl label namespace istio-system istio-discovery=enabled
  2. 创建名为 istio.yaml 的 Istio 资源:

    apiVersion: sailoperator.io/v1
    kind: Istio
    metadata:
      name: default
    spec:
      namespace: istio-system
      profile: ambient
      values:
        pilot:
          trustedZtunnelNamespace: ztunnel
        meshConfig:
          discoverySelectors:
            - matchLabels:
                istio-discovery: enabled
    1. 必须将 profile 字段设置为 ambient
    2. 必须配置 .spec.values.pilot.trustedZtunnelNamespace,与 ZTunnel 资源安装的命名空间保持一致。
    3. discoverySelectors 配置确保控制平面仅监控带有 istio-discovery=enabled 标签的命名空间,有助于减少配置开销,并支持多个服务网格在同一集群共存。详情请参见ambient mode 中的 Discovery selectors
  3. 应用 Istio 自定义资源(CR):

    kubectl apply -f istio.yaml
  4. 等待 Istio 控制平面就绪:

    kubectl wait --for=condition=Ready istios/default --timeout=3m

安装 ZTunnel 代理

  1. 创建 ztunnel 命名空间并添加标签 istio-discovery=enabled

    kubectl create namespace ztunnel
    kubectl label namespace ztunnel istio-discovery=enabled
    NOTE

    ZTunnel 资源的命名空间名称必须与 Istio 配置中的 trustedZtunnelNamespace 参数匹配。

  2. 创建名为 ztunnel.yaml 的 ZTunnel 资源:

    apiVersion: sailoperator.io/v1
    kind: ZTunnel
    metadata:
      name: default
    spec:
      namespace: ztunnel
  3. 应用 ZTunnel CR:

    kubectl apply -f ztunnel.yaml
  4. 等待 ZTunnel Pod 就绪:

    kubectl wait --for=condition=Ready ztunnel/default --timeout=3m