在 OKD 上运行 AISIX
AISIX 在 OKD 上使用标准 Kubernetes 安装与升级流程,同时针对 Security Context Constraints(SCC)、Route 和内置 PostgreSQL 安全上下文进行平台专用处理。本页涵盖三种产品的 AISIX 网关,以及 AISIX Enterprise 控制面。
请先准备现有 OKD 集群,以及可在目标项目中创建资源的 oc 会话。AISIX Helm Chart 支持 OKD 4.11 或更高版本默认使用的 restricted-v2 SCC。安装或升级 AISIX 前,请确认 AISIX 服务账户可以使用该 SCC。创建或升级 OKD 集群本身与安装 AISIX 是不同的操作。
新安装时,请先选择适合部署方式的基础 Kubernetes 流程,再应用本页相应的 OKD 指导。
| 部署方式 | Kubernetes 流程 | 平台专用要求 |
|---|---|---|
| AISIX OSS | 在 Kubernetes 上部署 AISIX OSS | 无需额外 SCC values。 |
| 连接 AISIX Enterprise 或 AISIX Cloud 的网关 | 为 AISIX Enterprise 或 AISIX Cloud 部署网关 | 无需额外 SCC values。 |
| AISIX Enterprise | 安装 AISIX Enterprise | 禁用内置 PostgreSQL 安全上下文,或使用外部数据库。 |
了解安全上下文
AISIX 应用 Chart 不固定 runAsUser、runAsGroup 或 fsGroup。其 Pod 安全上下文启用 runAsNonRoot 和 RuntimeDefault seccomp 配置,因此平台可以从项目允许范围内分配 ID。
应用容器使用只读根文件系统,并禁止权限提升。网关移除除 NET_BIND_SERVICE 之外的所有能力;控制面容器移除所有能力。运行时可写路径使用 emptyDir 卷。
不要为 AISIX 服务账户授予 anyuid SCC。如果现有 values 固定了用户或组 ID,请移除这些值,除非集群管理员已将其分配给项目。
选择 OKD 项目
使用现有项目,或在集群允许创建项目时申请新项目:
# 选择现有项目。
oc project aisix
# 或申请新项目。
oc new-project aisix
本页示例使用 aisix。按照链接中的 Kubernetes 流程操作时,请跳过任何 kubectl create namespace 命令,并从 Helm 命令中省略 --create-namespace。流程中指定命名空间的地方均应使用选定的 OKD 项目。
选择 Route 主机名
为部署创建的 Route 选择主机名。安装 AISIX Enterprise 前,请先选择控制面和数据面管理器的主机名。公共控制面 URL 用于浏览器链接;数据面管理器会为配置的端点签发 TLS 证书。
以下示例在集群的通配应用域名下创建名称:
export ROUTE_DOMAIN="$(oc get ingresses.config.openshift.io cluster \
-o jsonpath='{.spec.domain}')"
export GATEWAY_ROUTE_HOST="aisix-gateway.$ROUTE_DOMAIN"
export CP_ROUTE_HOST="aisix.$ROUTE_DOMAIN"
export DPM_ROUTE_HOST="aisix-dpm.$ROUTE_DOMAIN"
若改用组织管理的 DNS,请将变量设为相应主机名,并确保它们解析到 OKD 路由器。对于 edge Route,还需提供匹配的 Route 证书和密钥,或配置 Ingress Controller 默认的证书以覆盖这些主机名。数据面管理器的 passthrough Route 使用根据 api.dpmgrBaseURL 签发的证书。
安装网关
按照前表中适用的 Kubernetes 网关流程操作,用 oc 替代 kubectl,并用前面选定的项目替代流程中的命名空间。无需自定义 SCC 或修改服务账户。
安装后,确认 Pod 使用 restricted-v2 和项目分配的 UID:
export GATEWAY_NAMESPACE="aisix"
export GATEWAY_RELEASE="aisix-dp"
oc get pods -n "$GATEWAY_NAMESPACE" \
-l "app.kubernetes.io/instance=$GATEWAY_RELEASE,app.kubernetes.io/component=gateway"
oc get pod -n "$GATEWAY_NAMESPACE" <gateway-pod> \
-o jsonpath='{.metadata.annotations.openshift\.io/scc}{"\n"}{.spec.containers[0].securityContext.runAsUser}{"\n"}'
注解应显示 restricted-v2。平台可能将分配的 UID 放在 Pod 而非容器上,因此第二行为空本身不表示存在问题。如需确认运行时 UID,请使用 oc exec -n "$GATEWAY_NAMESPACE" <gateway-pod> -- id。
安装 AISIX Enterprise
请查看安装 AISIX Enterprise中的要求,但不要执行该页的 helm install 命令。本节命令会使用 OKD 专用的 PostgreSQL values 和 Route URL 替代该安装命令。
cp-api 和 dp-manager 工作负载无需额外 SCC values。请在安装时使用前节选定的 Route 主机名,使数据面管理器证书与其 passthrough Route 匹配。
内置 PostgreSQL 依赖固定了自己的用户和组 ID。请禁用其 Pod 和容器安全上下文,让 restricted-v2 分配 ID:
postgresql:
primary:
podSecurityContext:
enabled: false
containerSecurityContext:
enabled: false
安装时,将该文件与公共端点和所需密钥一起传入:
helm repo add api7 https://charts.api7.ai
helm repo update
helm install aisix-cp api7/aisix-cp \
--namespace aisix \
--version 1.6.0 \
--values values.yaml \
--set-string api.publicBaseURL="https://$CP_ROUTE_HOST" \
--set-string api.dpmgrBaseURL="https://$DPM_ROUTE_HOST" \
--set secrets.masterKey="$(openssl rand -base64 32)" \
--set postgresql.auth.password="$(openssl rand -hex 24)" \
--set postgresql.auth.postgresPassword="$(openssl rand -hex 24)"