gateway 是一个专用的 Envoy 代理部署,配合 Kubernetes Service 使用,运行在服务网格的边缘。它能够对进入或离开网格的流量进行细粒度控制。 在 Alauda Service Mesh 中,gateway 通过gateway 注入进行安装。
gateway 注入利用与 sidecar 注入相同的机制,将 Envoy 代理部署到 gateway pod 中。部署 gateway 的步骤如下:
Deployment
和对应的 Service
。Gateway
和 VirtualService
资源以控制入口或出口流量。对于运行 Linux 内核版本低于 4.11(例如 CentOS 7)的节点,gateway 安装前需要额外配置。
如果您的内核版本是 4.11 或更高版本,可跳过本节。
前提条件
jq
,用于处理 JSON。操作步骤
创建一个名为 gateway-injection-template.txt
的 YAML 文件,包含 gateway 的默认注入模板。
sysctls
,因为旧版 Linux 内核不支持 net.ipv4.ip_unprivileged_port_start
。CAP_NET_BIND_SERVICE
能力,允许 gateway 监听 1024 以下端口。为 Istio
资源的默认 gateway
注入模板打补丁:
运行以下命令,等待控制平面返回 Ready
状态:
本操作步骤说明如何通过 gateway 注入安装 gateway。
以下步骤适用于 ingress 和 egress gateway 部署。
前提条件
操作步骤
创建 gateway 命名空间:
gateway 和 Istio 控制平面应安装在不同命名空间。
您可以将 gateway 安装在专用的 gateway 命名空间中。 这种方式允许多个不同命名空间中的应用共享该 gateway。 也可以将 gateway 安装在应用命名空间中, 此时 gateway 作为该命名空间内应用的专用 gateway。
创建名为 secret-reader.yaml
的 YAML 文件,定义 gateway 部署所需的 ServiceAccount、Role 和 RoleBinding,允许 gateway 读取 secret 以获取 TLS 凭证。
运行以下命令应用 YAML 文件:
创建名为 gateway-deployment.yaml
的 YAML 文件,定义 gateway 的 Kubernetes Deployment
对象。
Gateway
资源选择 gateway 工作负载。sidecar.istio.io/inject
标签为 true
启用 gateway 注入。
如果 Istio 资源名称不是 default,需使用 istio.io/rev: <istio_revision>
标签,revision 表示 Istio 资源的活动版本。auto
,使镜像在每次 pod 启动时自动更新。serviceAccountName
设置为之前创建的 ServiceAccount
名称。运行以下命令应用 YAML 文件:
运行以下命令验证 gateway Deployment
是否成功滚动更新:
您应看到类似如下输出:
示例输出
创建名为 gateway-service.yaml
的 YAML 文件,定义 gateway 的 Kubernetes Service
对象。
spec.type
设置为 ClusterIP
时,gateway Service
只能在集群内部访问。
若 gateway 需处理来自集群外部的入口流量,应将 spec.type
设置为 LoadBalancer
。selector
设置为之前 gateway 部署的 pod 模板中指定的唯一标签或标签集合。运行以下命令应用 YAML 文件:
运行以下命令验证 gateway 服务是否正确指向 gateway pod 的端点:
您应看到类似如下示例输出:
示例输出
可选:创建名为 gateway-hpa.yaml
的 YAML 文件,定义 gateway 的水平 Pod 自动扩缩器。
以下示例将最小副本数设置为 2
,最大副本数设置为 5
,当平均 CPU 利用率超过 CPU 资源限制的 80% 时扩容。
该限制在 gateway 部署的 pod 模板中指定。
spec.scaleTargetRef.name
设置为之前创建的 gateway 部署名称。可选:运行以下命令应用 YAML 文件:
可选:创建名为 gateway-pdb.yaml
的 YAML 文件,定义 gateway 的 Pod 中断预算。
以下示例允许只有在驱逐后集群中至少还有 1
个健康 gateway pod 时,才允许驱逐 gateway pod。
spec.selector.matchLabels
设置为之前 gateway 部署的 pod 模板中指定的唯一标签或标签集合。可选:运行以下命令应用 YAML 文件: