通过 gateway injection 安装 gateway
本操作步骤介绍如何使用 gateway injection 安装 gateway。
以下操作步骤适用于 ingress 和 egress gateway 部署。
前提条件
- 已安装 Alauda Service Mesh v2 Operator。
- 已部署 Istio 控制平面。
- 已创建
IstioCNI资源。 - 确认 Linux kernel 兼容性。
- 确认 Namespace 要求。
操作步骤
-
为 gateway 创建 namespace:
NOTE请将 gateway 和 Istio 控制平面安装在不同的 namespace 中。
您可以在专用的 gateway namespace 中安装 gateway。 这样可以让不同 namespace 中运行的多个原生应用共享该 gateway。 或者,您也可以在原生应用 namespace 中安装 gateway。 在这种方式中,gateway 将作为该 namespace 中原生应用的专用 gateway。
-
创建名为
secret-reader.yaml的 YAML 文件,为 gateway 部署定义 service account、role 和 role binding。这些设置使 gateway 能够读取 secrets,这是获取 TLS 凭据所必需的。 -
运行以下命令应用 YAML 文件:
-
创建名为
gateway-deployment.yaml的 YAML 文件,为 gateway 定义 KubernetesDeployment对象。- 表示 Istio 控制平面使用 gateway injection 模板,而不是默认的 sidecar 模板。
- 确保为 gateway 部署设置唯一的 label。
必须使用唯一 label,以便 Istio
Gateway资源能够选择 gateway 工作负载。 - 将
sidecar.istio.io/injectlabel 设置为true,启用 gateway injection。 如果 Istio 资源的名称不是 default,则必须改用istio.io/rev: <istio_revision>label,其中 revision 表示 Istio 资源的活动 revision。 - 将 image 字段设置为
auto,以便每次 pod 启动时自动更新 image。 - 添加
RuntimeDefaultseccomp profile,使 gateway pod 满足RestrictedPod Security Admission profile。gatewayinjection 模板不会从Istio资源读取spec.values.global.proxy.seccompProfile,因此必须在 gateway 部署本身上设置该 profile。 如果 gateway namespace 未强制执行Restrictedprofile,请删除此字段。 - 将
serviceAccountName设置为之前创建的ServiceAccount的名称。 - (可选)取消注释,以设置将 gateway pod 调度到 Infra Nodes 的 node selector。
- (可选)取消注释,以设置允许将 gateway pod 调度到 Infra Nodes 的 toleration。
-
运行以下命令应用 YAML 文件:
-
运行以下命令,验证 gateway
Deploymentrollout 是否成功:您应看到类似以下内容的输出:
示例输出
-
创建名为
gateway-service.yaml的 YAML 文件,其中包含 gateway 的 KubernetesService对象。- 将
spec.type设置为ClusterIP时,gatewayService对象只能从集群内部访问。 如果 gateway 必须处理来自集群外部的 ingress 流量,请将spec.type设置为LoadBalancer。 - 将
selector设置为之前创建的 gateway 部署 pod 模板中指定的唯一 label 或 label 集合。
- 将
-
运行以下命令应用 YAML 文件:
-
运行以下命令,验证 gateway service 是否以 gateway pod 的 endpoint 为目标:
您应看到类似以下示例的输出:
示例输出
-
可选:创建名为
gateway-hpa.yaml的 YAML 文件,为 gateway 定义 horizontal pod autoscaler。 以下示例将最小副本数设置为2,最大副本数设置为5,并在平均 CPU 利用率超过 CPU 资源限制的 80% 时扩展副本数。 此限制在 gateway 部署的 pod 模板中指定。- 将
spec.scaleTargetRef.name设置为之前创建的 gateway 部署的名称。
- 将
-
可选:运行以下命令应用 YAML 文件:
-
可选:创建名为
gateway-pdb.yaml的 YAML 文件,为 gateway 定义 pod disruption budget。 以下示例规定,只有在驱逐后集群中至少保留1个健康的 gateway pod 时,才允许驱逐 gateway pod。- 将
spec.selector.matchLabels设置为之前创建的 gateway 部署 pod 模板中指定的唯一 label 或 label 集合。
- 将
-
可选:运行以下命令应用 YAML 文件: