适用于:开发人员 | 高级
Azure API 管理 自承载网关 需要与其关联的基于云的 API 管理实例建立连接,以便报告状态、检查和应用配置更新以及发送指标和事件。
本文介绍如何使用基于令牌的默认身份验证方法启用自承载网关进行身份验证。 此方法使用访问令牌和终结点 URL 在自行托管的网关和您的 API 管理实例之间建立安全通信。 有关其他身份验证选项,请参阅 自承载网关身份验证选项。
先决条件
- 开发人员或高级服务层级中的 API 管理实例。 如果需要,请完成以下快速入门: 创建 Azure API 管理实例。
- 实例上的 网关资源 。
- Azure Kubernetes 服务(AKS)群集或 Kubernetes 群集。
- 自托管网关容器映像版本 2.0 或更高版本
生成访问令牌
在 API 管理中预配网关资源时,会自动生成默认身份验证令牌。 要检索令牌,请执行以下步骤:
- 在 Microsoft Azure 门户中,转到 API 管理实例。
- 选择 “部署”和“基础结构>网关”。
- 从列表中选择网关。
- 在网关页上,选择 “设置>部署”。
- 复制 令牌 值。 使用此令牌向 API 管理实例认证自托管网关。
- 为环境选择一个部署脚本,以便在下一部分中复制和使用,以使用令牌身份验证部署网关。
重要
- 确保访问令牌安全。 此令牌授予对网关配置的访问权限。 不要将其提交到版本控制系统或将其公开。
- 访问令牌具有定义的生存期,必须定期轮换。 可以订阅系统事件,以在令牌即将过期或已过期时收到通知。 有关详细信息,请参阅本文后面的部分。
部署自托管网关
使用默认的令牌身份验证,将自承载网关部署到容器化环境中,例如 Kubernetes。
可以使用 Helm 图表部署具有令牌身份验证的自承载网关。
将 helm install 命令中的以下值替换为实际值:
-
<gateway-name>:Azure API 管理实例名称
-
<gateway-url>:网关的 URL,格式 https://<gateway-name>.configuration.azure-api.cn
-
<gateway-key>:访问令牌
有关先决条件和详细信息,请参阅 使用 Helm 部署 API 管理自承载网关。
helm install --name azure-api-management-gateway azure-apim-gateway/azure-api-management-gateway \
--set gateway.configuration.uri='<gateway-url>' \
--set gateway.auth.key='<gateway-key>'
确认网关正在运行
运行以下命令来检查网关 Pod 是否正在运行。 Pod 名称将有所不同。
kubectl get pods
NAME READY STATUS RESTARTS AGE
azure-api-management-gateway-59f5fb94c-s9stz 1/1 Running 0 1m
运行以下命令来检查网关服务是否正在运行。 你的服务名称和 IP 地址与此不同。
kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
azure-api-management-gateway ClusterIP 10.0.229.55 <none> 8080/TCP,8081/TCP 1m
返回到Azure门户,确认部署的网关节点报告正常状态。
小窍门
使用 kubectl logs <gateway-pod-name> 命令查看自承载网关日志的快照。
以下示例 YAML 配置显示了使用令牌身份验证部署到 Kubernetes 所需的组件和设置。
注释
请确保将占位符值替换为实际配置:
-
<namespace-name>:Kubernetes 命名空间
-
<service-name>.configuration.azure-api.cn:API 管理配置终结点
-
<gateway-name>:网关名称
-
<configuration-token>:访问令牌
---
apiVersion: v1
kind: Secret
metadata:
name: apim-access-token
namespace: <namespace-name>
type: Opaque
stringData:
config.service.auth.key: "<configuration-token>"
---
apiVersion: v1
kind: ConfigMap
metadata:
name: apim-gateway-env
namespace: <namespace-name>
data:
gateway.name: <gateway-name>
config.service.auth: key
config.service.endpoint: https://<service-name>.configuration.azure-api.cn
telemetry.logs.std.level: info
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: apim-gateway
namespace: <namespace-name>
spec:
replicas: 1
selector:
matchLabels:
app: apim-gateway
template:
metadata:
labels:
app: apim-gateway
spec:
containers:
- name: apim-gateway
image: mcr.microsoft.com/azure-api-management/gateway:v2
ports:
- name: http
containerPort: 8080
protocol: TCP
- name: https
containerPort: 8081
protocol: TCP
readinessProbe:
failureThreshold: 3
httpGet:
path: /internal-status-0123456789abcdef
port: http
scheme: HTTP
periodSeconds: 5
successThreshold: 1
timeoutSeconds: 1
resources:
limits:
cpu: "2"
memory: 2Gi
requests:
cpu: "2"
memory: 2Gi
envFrom:
- configMapRef:
name: apim-gateway-env
- secretRef:
name: apim-access-token
---
apiVersion: v1
kind: Service
metadata:
name: apim-gateway-loadbalancer
namespace: <namespace-name>
spec:
type: LoadBalancer
selector:
app: apim-gateway
ports:
- name: http
port: 80
protocol: TCP
targetPort: 8080
- name: https
port: 443
protocol: TCP
targetPort: 8081
ConfigMap 定义网关的身份验证和连接设置:
-
config.service.auth:密钥 - 将基于令牌的身份验证指定为方法
-
config.service.endpoint - API 管理配置终结点 URL
-
gateway.name - API 管理实例中的网关资源的名称
部署到 Kubernetes
将 YAML 配置保存到文件(例如 apim-access-token.yaml),并将其部署到 Kubernetes 群集:
kubectl apply -f apim-access-token.yaml
验证部署:
kubectl get pods -n <namespace-name>
kubectl logs -n <namespace-name> <pod-name>
确认网关正在运行
运行以下命令,检查部署是否成功。 创建所有对象以及 Pod 初始化可能需要一点时间。
kubectl get deployments
它应返回
NAME READY UP-TO-DATE AVAILABLE AGE
<gateway-name> 1/1 1 1 18s
运行以下命令,检查是否已成功创建服务。 服务 IP 和端口将有所不同。
kubectl get services
它应返回
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
<gateway-name>-live-traffic ClusterIP None <none> 4290/UDP,4291/UDP 9m1s
<gateway-name>-instance-discovery LoadBalancer 10.99.236.168 <pending> 80:31620/TCP,443:30456/TCP 9m1s
返回到 Azure 门户,然后选择网关的 “概述 ”选项卡。
确认状态显示为绿色勾号,并且节点计数与 YAML 文件中指定的副本数量一致。 此状态意味着部署的自托管网关 Pod 已成功与 API 管理服务进行通信,并定期发送“心跳信号”。
小窍门
-
kubectl logs deployment/<gateway-name>运行命令,查看随机选择的 Pod 中的日志(如果有多个)。
- 运行
kubectl logs -h 以获取完整的命令选项集,例如如何查看特定 Pod 或容器的日志。
令牌轮换和管理
访问令牌具有定义的生存期。 令牌过期后,网关将失去与 API 管理实例的连接。
若要轮换令牌,请执行以下步骤:
- 在 Microsoft Azure 门户中,转到 API 管理实例。
- 选择 “部署”和“基础结构>网关”。
- 选择网关。
- 在 “部署 ”选项卡上,选择“ 重新生成令牌”。
- 复制新令牌。
- 使用新令牌更新 Kubernetes Secret:
kubectl patch secret apim-access-token -n <namespace-name> -p '{"data":{"config.service.auth.key":"'$(echo -n "<new-token>" | base64)'"}}' --type=merge
相关内容