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_SERVICEcapability,以允许绑定特权端口。
如果你的内核版本为 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,因为在早于 4.11 的 Linux 内核中,net.ipv4.ip_unprivileged_port_start不可用。
- 删除
场景 2:早于 4.11 的内核版本 + 特权端口(端口 < 1024)
如果网关需要监听 1024 以下的端口,除了修改 sysctls: [] 之外,还必须添加 NET_BIND_SERVICE capability。修改 gateway-injection-template.txt 中 istio-proxy 容器的 securityContext 部分:
如果在添加 NET_BIND_SERVICE capability 后,网关仍然无法监听 1024 以下的端口,请考虑以下替代方案:
- 使用 1024 或更高的端口(推荐)— 将网关监听端口重新配置为 ≥ 1024,以完全避免权限问题。
- 以 root 身份运行网关
- 在容器的
securityContext中设置runAsUser: 0、runAsGroup: 0和runAsNonRoot: false。这将为网关进程授予完整权限。在采用此方法前,请仔细评估安全影响。 - 还需要在
gateway-deployment.yaml中为istio-proxy容器设置runAsNonRoot: false(或移除该字段),以使其与此模板保持一致。否则,容器级别的runAsNonRoot: true会覆盖模板设置,并且网关 pod 会因container's runAsUser breaks non-root policy而被拒绝。
- 在容器的
应用注入模板
-
为
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,因为在早于 4.11 的 Linux 内核中,net.ipv4.ip_unprivileged_port_start不可用。
- 删除
场景 2:早于 4.11 的内核版本 + 特权端口(端口 < 1024)
如果网关需要监听 1024 以下的端口,请在 ConfigMap 中添加 NET_BIND_SERVICE capability。修改 data.deployment 字段,以包含容器级安全上下文:
如果在添加 NET_BIND_SERVICE capability 后,网关仍然无法监听 1024 以下的端口,请考虑以下替代方案:
- 使用 1024 或更高的端口(推荐)— 将网关监听端口重新配置为 ≥ 1024,以完全避免权限问题。
- 以 root 身份运行网关 — 在容器的
securityContext中设置runAsUser: 0、runAsGroup: 0和runAsNonRoot: false。这将为网关进程授予完整权限。在采用此方法前,请仔细评估安全影响。
应用 ConfigMap
-
在你的 Gateway 资源中引用该 ConfigMap,添加
infrastructure.parametersRef字段:此配置可确保网关部署使用 ConfigMap 中定义的自定义安全上下文设置。