在 OpenShift 上部署
API7 网关在 Red Hat OpenShift 和标准 Kubernetes 部署上使用相同的 Helm Chart,但需要额外配置安全上下文约束(SCC)和服务账号。本页中的值与已发布的 Chart 匹配,但此流程并未在每一种受支持的 OpenShift 配置上完成端到端安装验证。请先在非生产项目中测试,并在发布前根据集群的 SCC 和存储策略审查渲染后的清单。
架构概览
API7 网关在 OpenShift 上使用与其他 Kubernetes 集群相同的双组件架构:
- 控制面(CP):控制台、DP Manager 和 PostgreSQL 数据库。
- 数据面(DP):处理 API 流量的 API7 网关实例。
OpenShift 的主要区别是 Pod 必须符合安全上下文约束(SCC),它限制 Pod 可以执行的操作。
前置条件
开始前,请确保具备:
- 受支持的 OpenShift 4 集群,以及向服务账号授予 SCC 的权限。
- 与集群兼容的
ocCLI 版本。请参阅安装 OpenShift CLI。 - Helm 3。请参阅安装 Helm。
- API7 网关许可证。请参阅获取试用许可证。
登录 OpenShift 集群
使用 oc CLI 登录。可以在 OpenShift Web 控制台的用户菜单中找到登录命令:
oc login \
--token=sha256~YOUR_TOKEN \
--server=https://api.YOUR_CLUSTER.openshiftapps.com:6443
验证当前身份是否可以使用本指南稍后引用的 nonroot-v2 SCC:
oc auth can-i use scc/nonroot-v2
此命令仅检查当前身份。将 SCC 使用权委托给网关服务账号,还需要在目标项目中创建 Role 和 RoleBinding 的权限。如果当前身份无法创建或绑定它们,请让集群管理员执行这些步骤。
第 1 步:创建项目
为 API7 创建专用 OpenShift 项目(命名空间):
oc new-project api7
也可以通过 OpenShift Web 控制台创建项目。
第 2 步:安装控制面
添加 API7 Helm 仓库
helm repo add api7 https://charts.api7.ai
helm repo update
配置内置组件的安全上下文
内置 PostgreSQL、Prometheus 和 Jaeger Pod 带有明确的 securityContext 设置,与 OpenShift SCC 系统冲突。PostgreSQL 和 Prometheus 需要可写文件系统,Jaeger 则使用固定 UID。在 OpenShift 上应清除这些设置,使 SCC 系统可以从项目允许的范围中分配 UID:
postgresql:
primary:
podSecurityContext:
enabled: false
containerSecurityContext:
enabled: false
prometheus:
server:
podSecurityContext:
enabled: false
containerSecurityContext:
enabled: false
jaeger:
jaeger:
podSecurityContext:
runAsUser: null
runAsGroup: null
fsGroup: null
从 API7 网关 3.9.5 开始,Jaeger 成为支持分布式追踪的内置控制面组件。与 PostgreSQL 和 Prometheus 不同,内置 Jaeger Chart 的安全上下文没有 enabled 开关,并将 runAsUser、runAsGroup 和 fsGroup 设置为 10001,会被 OpenShift SCC 拒绝。由于 Helm 会合并配置值,podSecurityContext: {} 无法清除这些键,必须逐一设置为 null。Jaeger 使用内存存储,因此不需要固定 fsGroup。
生产部署应使用外部 PostgreSQL 数据库(例如 Amazon RDS、Azure Database for PostgreSQL 或专用 PostgreSQL 实例),而不是内置数据库。外部数据库配置请参阅 在 Kubernetes 上部署 API7 企业版。
安装控制面 Helm Chart
helm install api7ee3 api7/api7ee3 \
--version 3.10.10 \
-f cp-values.yaml \
-n api7
验证控制面 Service
oc get svc -n api7 -l app.kubernetes.io/name=api7ee3 -o wide