Linux Kernel 兼容性说明
对于运行 4.11 之前 Linux kernel 版本的节点(例如 CentOS 7),在安装 gateway 之前需要进行额外配置。根据是否需要监听 1024 以下的端口,分为以下两种场景:
- 场景 1: 仅适用于 4.11 之前的 kernel 版本 — gateway 监听 1024 或更高的端口。需要设置
sysctls: [],以移除默认的net.ipv4.ip_unprivileged_port_startsysctl;该 sysctl 在 4.11 之前的 kernel 中不可用。 - 场景 2: 4.11 之前的 kernel 版本 + 特权端口 — gateway 需要监听 1024 以下的端口。除了场景 1 中对
sysctls: []的更改之外,还必须添加NET_BIND_SERVICEcapability,以允许绑定特权端口。
如果您的 kernel 版本为 4.11 或更高版本,请跳过本节。
目录
Istio Gateway前提条件操作步骤场景 1: 仅适用于 4.11 之前的 kernel 版本(端口 ≥ 1024)场景 2: 4.11 之前的 kernel 版本 + 特权端口(端口 < 1024)应用注入模板Kubernetes Gateway API前提条件操作步骤场景 1: 仅适用于 4.11 之前的 kernel 版本(端口 ≥ 1024)场景 2: 4.11 之前的 kernel 版本 + 特权端口(端口 < 1024)应用 ConfigMapIstio Gateway
前提条件
- 在本地安装
jq,以便在以下步骤中处理 JSON。
操作步骤
场景 1: 仅适用于 4.11 之前的 kernel 版本(端口 ≥ 1024)
-
创建名为
gateway-injection-template.txt的 YAML 文件,其中包含 gateway 的默认注入模板。点击展开
- 移除
sysctls,因为net.ipv4.ip_unprivileged_port_start在 4.11 之前的 Linux kernel 中不可用。
- 移除
场景 2: 4.11 之前的 kernel 版本 + 特权端口(端口 < 1024)
如果 gateway 需要监听 1024 以下的端口,除了对 sysctls: [] 的更改之外,还必须添加 NET_BIND_SERVICE capability。修改 gateway-injection-template.txt 中 istio-proxy 容器的 securityContext 部分:
如果添加 NET_BIND_SERVICE capability 后 gateway 仍无法监听 1024 以下的端口,请考虑以下替代方案:
- 使用 1024 或更高的端口(推荐)— 重新配置 gateway listener,使其使用 ≥ 1024 的端口,从根本上避免特权问题。
- 以 root 身份运行 gateway
- 在容器的
securityContext中设置runAsUser: 0、runAsGroup: 0和runAsNonRoot: false。这会向 gateway 进程授予完整权限。使用此方法前,请仔细评估其安全影响。 - 同时在
gateway-deployment.yaml的istio-proxy容器上设置runAsNonRoot: false(或移除该字段),使其与此模板保持一致。否则,其容器级runAsNonRoot: true会覆盖模板,导致 gateway pod 被container's runAsUser breaks non-root policy拒绝。 - 以 root 身份运行 gateway 与
RestrictedPod Security Admission profile 不兼容,因为该 profile 禁止 root 容器。gateway namespace 必须强制执行Baselineprofile 或更低级别。有关更多信息,请参阅 Pod Security Admission。
- 在容器的
应用注入模板
-
为
Istioresource 修补默认的gateway注入模板: -
运行以下命令,等待 control plane 返回
Readystatus condition:
Kubernetes Gateway API
前提条件
- Alauda Container Platform 4.2.0 或更高版本,或者将 Gateway API CRD 升级到最新版本。
操作步骤
场景 1: 仅适用于 4.11 之前的 kernel 版本(端口 ≥ 1024)
-
在计划部署 Gateway 的同一 namespace 中创建名为
asm-kube-gateway-options的 ConfigMap:- 移除
sysctls,因为net.ipv4.ip_unprivileged_port_start在 4.11 之前的 Linux kernel 中不可用。
- 移除
场景 2: 4.11 之前的 kernel 版本 + 特权端口(端口 < 1024)
如果 gateway 需要监听 1024 以下的端口,请在 ConfigMap 中添加 NET_BIND_SERVICE capability。修改 data.deployment 字段,使其包含容器级 security context:
如果添加 NET_BIND_SERVICE capability 后 gateway 仍无法监听 1024 以下的端口,请考虑以下替代方案:
- 使用 1024 或更高的端口(推荐)— 重新配置 gateway listener,使其使用 ≥ 1024 的端口,从根本上避免特权问题。
- 以 root 身份运行 gateway — 在容器的
securityContext中设置runAsUser: 0、runAsGroup: 0和runAsNonRoot: false。这会向 gateway 进程授予完整权限。使用此方法前,请仔细评估其安全影响。 以 root 身份运行 gateway 与RestrictedPod Security Admission profile 不兼容,因为该 profile 禁止 root 容器。gateway namespace 必须强制执行Baselineprofile 或更低级别。有关更多信息,请参阅 Pod Security Admission。
应用 ConfigMap
-
添加
infrastructure.parametersRef字段,在 Gateway resource 中引用该 ConfigMap:此配置可确保 gateway deployment 使用 ConfigMap 中定义的自定义 security context 设置。