设置 API 认证
为了安全起见,你应该只允许经过认证和授权的消费者(consumers)访问你的 API。API7 网关提供了多种插件来实现认证和授权。
在服务(services)上启用的认证插件充当了 API 的锁,而消费者的凭证则作为解锁的钥匙。在 API7 网关中,你需要一个唯一的用户名和至少一个凭证来设置消费者。
消费者可以使用不同类型的多个凭证,并且在认证时它们被同等对待。
先决条件
备注
避免在同一服务/路由上配置多个认证插件,以防发生冲突。
为 API 启用 key-auth 认证
为服务启用
如果要对服 务中的所有路由使用 key-auth 认证,请在服务上启用 Key Auth 插件。
- Dashboard
- ADC
- Ingress Controller
- 从侧边导航栏中选择你网关组的服务,然后选择你想要修改的服务,例如
httpbin。 - 从侧边导航栏中选择插件,然后点击新增插件。
- 搜索
key-auth插件,然后点击新增。 - 在对话框中执行以下操作:
-
在 JSON 编辑器 中添加以下配置:
{
} -
点击新增。
更新服务配置以使用 key-auth 认证:
adc-service.yaml
services:
- name: httpbin
upstream:
name: default
scheme: http
nodes:
- host: httpbin.org
port: 80
weight: 100
plugins:
key-auth:
_meta:
disable: false
routes:
- uris:
- /ip
name: get-ip
methods:
- GET
将配置同步到 API7 企业版:
adc sync -f adc-consumer.yaml -f adc-service.yaml
备注
ADC 使用配置文件作为单一真实来源。因此,请确保将消费者和服务的配置文件同时传递给 adc sync 命令,以便两种配置都能生效。
- Gateway API
- APISIX CRD
为路由(同时也会创建一个服务)创建一个启用了 key-auth 认证的 Kubernetes 清单文件:
httpbin-key-auth.yaml
apiVersion: apisix.apache.org/v1alpha1
kind: PluginConfig
metadata:
namespace: api7
name: auth-plugin-config
spec:
plugins:
- name: key-auth
config:
_meta:
disable: false
---
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
namespace: api7
name: httpbin
spec:
parentRefs:
- name: apisix
rules:
- matches:
- path:
type: Exact
value: /ip
filters:
- type: ExtensionRef
extensionRef:
group: apisix.apache.org
kind: PluginConfig
name: auth-plugin-config
backendRefs:
- name: httpbin
port: 80
将配置应用到你的集群:
kubectl apply -f httpbin-key-auth.yaml
APISIX CRD 目前不支持在服务级别启用插件。
为单个路由启用
- Dashboard
- ADC
- Ingress Controller
如果要对特定路由使用 key-auth 认证,请在路由上而不是服务上启用 Key Auth 插件。
- 从侧边导航栏中选择你网关组的服务,然后选择你想要修改的服务,例如
httpbin。