在 OpenShift 上安装 API7 Ingress Controller
与标准 Kubernetes 环境相比,OpenShift 实施了更严格的安全控制和平台级约束。因此,部署时需要额外考虑若干事项。
本指南介绍如何在 OpenShift 集群上部署与 API7 企业版配合使用的 API7 Ingress Controller。
如果由 Red Hat OpenShift GitOps 管理安装,请按照使用 Argo CD 管理完成协调,并应用本文所述的 OpenShift 专用 SCC、非 root 运行和 CRD 要求。
本文不涵盖在 OpenShift 上安装 APISIX Ingress Controller,但两个控制器具有相同的 OpenShift 特定要求,因此安装流程大体相似:
- 安全上下文约束(SCC): OpenShift 默认限制 Pod 安全策略。必须为 Ingress Controller 配置适当的 SCC(通常为
nonroot-v2),才能使其正常运行。 - 非 root 运行要求: OpenShift 要求容器使用分配的 UID,以非 root 用户身份运行。因此,必须在 Helm 安装命令中显式配置
securityContext。 - 自定义资源定义(CRD)管理: Gateway API 所有权取决于 OpenShift 版本。OpenShift 4.18 及更早版本默认不安装这些 CRD;从 4.19 开始由 Ingress Operator 管理。此工作流使用
--skip-crds,并由集群平台团队单独管理所需 Gateway API 和 APISIX CRD。
前置条件
完成在 OpenShift 上部署 API7 企业版中的前置条件和安装步骤,但跳过生成部署脚本步骤。使用 Ingress Controller 时,必须在 Ingress Controller 类型的网关组中部署网关实例。
安装 API7 Ingress Controller
如果你想使用不同的命名空间或自定义其他配置名称,请相应地调整安装命令和配置值。
生成并运行部署脚本
进入 API7 控制台:
-
从侧边导航栏选择网关组,然后点击添加网关组。
-
选择类型为Ingress Controller。
-
在名称字段中输入
api7-ingress。 -
点击添加。

网关组创建后,部署步骤面板会提示你安装 Ingress Controller 并部署 GatewayProxy 配置。
输入 Ingress Controller 的 命名空间和名称。

然后点击生成脚本。

标注 ❶ 和 ❷ 表示发布版本固定值。请在命令末尾手动附加标为 ❸ 和 ❹ 的 OpenShift 专用参数,并确保前一行以反斜杠(\)结尾。命令应类似于以下内容:
helm repo add api7 https://charts.api7.ai
helm repo update
helm upgrade --install -n api7-enterprise-project --create-namespace api7-ingress api7/api7-ingress-controller \
--version 0.1.26 \
--set "deployment.image.repository=api7/api7-ingress-controller" \
--set "deployment.image.tag=2.2.0" \
--set "config.controllerName=api7.ai/api7-ingress-controller" \
--set "config.leaderElection.id=api7-ingress-controller-leader" \
--set "adc.securityContext.runAsUser=65532" \
--skip-crds
❶ --version 0.1.26:固定兼容的 API7 Ingress Controller Chart。
❷ deployment.image.tag=2.2.0:运行与 Chart 匹配的 Controller 镜像。
请始终使用同一 Controller 发布版本的 Chart、镜像和 CRD。不要把固定到其他 Controller 版本的 Dashboard 生成脚本,与本文档中的 CRD 混用。
❸ --set "adc.securityContext.runAsUser=65532":以非 root 用户(UID 65532)身份运行 API7 Ingress Controller,以符合 OpenShift 的安全策略。
❹ --skip-crds:跳过通过 Helm 安装 CRD,使集群平台团队可以根据已安装的 OpenShift 版本管理 Gateway API 所有权。之后必须单独安装 APISIX CRD。
在终端中运行它。如果部署成功,你应该会看到类似于以下的响应:
NAME: api7-ingress
LAST DEPLOYED: Mon Feb 2 15:12:59 2026
NAMESPACE: api7-enterprise-project
STATUS: deployed
REVISION: 1
TEST SUITE: None
为 API7 Ingress Controller 配置 SCC
创建一个名为 api7-ingress 的服务账户,该账户将在 Helm Chart 发布名称中被引用。角色必须分配给 Ingress Controller 部署所使用的服务账户。
oc create serviceaccount api7-ingress -n api7-enterprise-project
创建一个带有 nonroot-v2 SCC 的角色:
oc create role api7-ingress \
--verb=use \
--resource=scc \
--resource-name=nonroot-v2 \
-n api7-enterprise-project
将角色绑定到服务账户:
oc create rolebinding api7-ingress \
--role=api7-ingress \
--serviceaccount=api7-enterprise-project:api7-ingress \
-n api7-enterprise-project
安装所需 CRD
--skip-crds 标志会同时跳过 Chart 自带的 APISIX 与 Gateway API CRD。请根据 OpenShift 版本安装所需 CRD。
OpenShift 4.18 及更早版本
默认不安装 Gateway API CRD。如果计划使用 Gateway API 资源,请从相同的固定 Chart 版本安装 Gateway API CRD。请使用服务端应用,因为捆绑的 CRD 会超过客户端注解大小限制。如果应用报告所有权冲突,请确定现有 CRD 管理方,并通过该所有者更新 CRD,不要强制覆盖:
kubectl apply --server-side \
-f https://raw.githubusercontent.com/api7/api7-helm-chart/refs/tags/api7-ingress-controller-0.1.26/charts/ingress-controller/crds/gwapi-crds.yaml
安装 APISIX CRD:
kubectl apply --server-side \
-f https://raw.githubusercontent.com/api7/api7-helm-chart/refs/tags/api7-ingress-controller-0.1.26/charts/ingress-controller/crds/apisix-crds.yaml
OpenShift 4.19 及更高版本
OpenShift Ingress Operator 会安装并管理 Gateway API CRD。不要应用 Chart 中的 gwapi-crds.yaml 文件。只从相同的固定 Chart 版本安装 APISIX CRD:
kubectl apply --server-side \
-f https://raw.githubusercontent.com/api7/api7-helm-chart/refs/tags/api7-ingress-controller-0.1.26/charts/ingress-controller/crds/apisix-crds.yaml
OpenShift 4.19 使用其支持的 Gateway API 版本,而不是 Chart 自带的版本。请确认计划使用的 Gateway API 资源在集群中可用。
安装 APISIX CRD 后,应得到类似以下输出:
customresourcedefinition.apiextensions.k8s.io/apisixconsumers.apisix.apache.org created
customresourcedefinition.apiextensions.k8s.io/apisixglobalrules.apisix.apache.org created
customresourcedefinition.apiextensions.k8s.io/apisixpluginconfigs.apisix.apache.org created
customresourcedefinition.apiextensions.k8s.io/apisixroutes.apisix.apache.org created
customresourcedefinition.apiextensions.k8s.io/apisixtlses.apisix.apache.org created
customresourcedefinition.apiextensions.k8s.io/apisixupstreams.apisix.apache.org created
customresourcedefinition.apiextensions.k8s.io/backendtrafficpolicies.apisix.apache.org created
customresourcedefinition.apiextensions.k8s.io/consumers.apisix.apache.org created
customresourcedefinition.apiextensions.k8s.io/gatewayproxies.apisix.apache.org created
customresourcedefinition.apiextensions.k8s.io/httproutepolicies.apisix.apache.org created
customresourcedefinition.apiextensions.k8s.io/l4routepolicies.apisix.apache.org created
customresourcedefinition.apiextensions.k8s.io/pluginconfigs.apisix.apache.org created