Linux 内核兼容性说明
对于运行 Linux 内核版本早于 4.11(例如 CentOS 7)的节点,网关安装前需要进行额外配置。根据是否需要监听 1024 以下端口,有两种场景:
- 场景 1:仅针对内核版本早于 4.11 — 网关监听端口为 1024 或以上。需要将
sysctls: []设置为空,以移除默认的net.ipv4.ip_unprivileged_port_startsysctl,因为该项在早于 4.11 的内核中不可用。 - 场景 2:内核版本早于 4.11 且需要监听特权端口 — 网关需要监听 1024 以下端口。除了场景 1 中的
sysctls: []变更外,还必须添加NET_BIND_SERVICE能力,以允许绑定特权端口。
INFO
如果您的内核版本是 4.11 或更高版本,请跳过本节。
目录
Istio Gateway前提条件操作步骤场景 1:仅针对内核版本早于 4.11(端口 ≥ 1024)场景 2:内核版本早于 4.11 且需要监听特权端口(端口 < 1024)应用注入模板Kubernetes Gateway API前提条件操作步骤场景 1:仅针对内核版本早于 4.11(端口 ≥ 1024)场景 2:内核版本早于 4.11 且需要监听特权端口(端口 < 1024)应用 ConfigMapIstio Gateway
前提条件
- 本地安装
jq,用于处理本步骤中的 JSON。
操作步骤
场景 1:仅针对内核版本早于 4.11(端口 ≥ 1024)
-
创建一个名为
gateway-injection-template.txt的 YAML 文件,内容为网关的默认注入模板。点击展开
- 移除
sysctls,因为net.ipv4.ip_unprivileged_port_start在早于 4.11 的 Linux 内核中不可用。
- 移除
场景 2:内核版本早于 4.11 且需要监听特权端口(端口 < 1024)
如果网关需要监听 1024 以下端口,除了 sysctls: [] 变更外,还必须为 istio-proxy 容器的 securityContext 添加 NET_BIND_SERVICE 能力。修改 gateway-injection-template.txt 中的 securityContext 部分:
WARNING
如果添加 NET_BIND_SERVICE 能力后,网关仍无法监听 1024 以下端口,请考虑以下替代方案:
- 使用 1024 或以上端口(推荐)— 重新配置网关监听端口为 ≥ 1024,避免权限问题。
- 以 root 用户身份运行网关 — 在容器的
securityContext中设置runAsUser: 0、runAsGroup: 0和runAsNonRoot: false。这将赋予网关进程全部权限。使用前请谨慎评估安全风险。
应用注入模板
-
为
Istio资源的默认gateway注入模板打补丁: -
运行以下命令,等待控制平面返回
Ready状态条件:
Kubernetes Gateway API
前提条件
- Alauda Container Platform 4.2.0 或更高版本,或升级 Gateway API CRDs 至最新版本。
操作步骤
场景 1:仅针对内核版本早于 4.11(端口 ≥ 1024)
-
在计划部署 Gateway 的同一命名空间中,创建名为
asm-kube-gateway-options的 ConfigMap:- 移除
sysctls,因为net.ipv4.ip_unprivileged_port_start在早于 4.11 的 Linux 内核中不可用。
- 移除
场景 2:内核版本早于 4.11 且需要监听特权端口(端口 < 1024)
如果网关需要监听 1024 以下端口,在 ConfigMap 中添加 NET_BIND_SERVICE 能力。修改 data.deployment 字段,增加容器级别的安全上下文:
WARNING
如果添加 NET_BIND_SERVICE 能力后,网关仍无法监听 1024 以下端口,请考虑以下替代方案:
- 使用 1024 或以上端口(推荐)— 重新配置网关监听端口为 ≥ 1024,避免权限问题。
- 以 root 用户身份运行网关 — 在容器的
securityContext中设置runAsUser: 0、runAsGroup: 0和runAsNonRoot: false。这将赋予网关进程全部权限。使用前请谨慎评估安全风险。
应用 ConfigMap
-
在 Gateway 资源中引用该 ConfigMap,添加
infrastructure.parametersRef字段:此配置确保网关部署使用 ConfigMap 中定义的自定义安全上下文设置。