微服务网关接入认证服务器¶
微服务网关支持接入第三方认证服务器。
前提条件¶
选用认证服务器¶
默认的认证服务器¶
-
将认证服务器的代码模板克隆到本地。
-
直接使用 envoy-authz-java.yaml 以及文件下的默认镜像。
默认镜像是
release.daocloud.io/skoala/demo/envoy-authz-java:0.1.0
-
模板为简单的路径判断,当访问路径为
/
时通过认证,其余路径为拒绝访问。
自定义的认证服务器¶
-
将认证服务器的代码模板克隆到本地。
该项目分为两个子模块:
- API 模块是 Envoy 的
protobuf
文件的定义(无需修改) - authz-grpc-server 模块是认证服务器的认证逻辑处理地址(在这里填写认证逻辑)
- release.daocloud.io/skoala/demo/envoy-authz-java:0.1.0
- API 模块是 Envoy 的
-
使用如下命令编译 API 模块,解决找不到的问题
-
成功编译之后,在 check 方法中编写自定义的认证逻辑。
- check 方法位于
envoy-authz-java/authz-grpc-server/src/main/java/envoy/projectsesame/io/authzgrpcserver/AuthzService.java
- 模板为简单的路径判断,当访问路径为
/
时通过认证,其余路径为拒绝访问。
- check 方法位于
-
代码编写完成之后,使用 Docker 打包镜像。
代码模板仓库中已存在 Dockerfile 文件,可以直接使用该模板构建镜像。
-
将镜像地址填入 envoy-authz-java.yaml 文件中的 Deployment 下的
spec/template/spec/containers/image
字段。
接入认证服务器¶
-
在网关所在的集群内创建以下资源。使用
kubectl apply
命令基于 envoy-authz-java.yaml 文件可以一次性快速创建下述三项资源:- 认证服务器的 Deployment
- 认证服务器的 Service
- 认证服务器的 ExtensionService
-
在插件中心接入一个 Auth 插件
接入地址填写步骤 1 部署的应用外部访问地址,注意该应用的访问协议为 GRPC。
配置认证服务器¶
在网关层面配置¶
Note
HTTP 和 HTTPS 域名都支持安全认证,如需使用 HTTPS 域名,网关需要开启 HTTPS。
-
网关配置认证服务器。
-
创建
HTTP
或者HTTPS
域名,以 HTTP 域名为例,此时创建的域名都是默认开启安全认证的,并且无法关闭。 -
在网关下创建一个 API,
关联域名
填写刚才新创建的域名,匹配路径为/
,并将 API 上线。API 默认状态是应用域名的安全认证配置,也可以自定义插件的生效与否和附加参数。 -
现在即可通过认证服务器访问该 API 了。
-
访问
/
。访问结果如下,可以看到请求通过了。
-
访问
/test1
。访问结果如下,可以看到请求被拦截了。
-
在域名或 API 层面配置¶
Note
只有 HTTPS 域名支持安全认证,网关需要开启 HTTPS。
-
创建
HTTPS
域名,并手动配置安全认证。 -
在网关下创建一个 API,
关联域名
填写刚才新创建的域名,匹配路径为/
,并将 API 上线。API 默认状态是应用域名的安全认证配置,也可以自定义插件的生效与否和附加参数。 -
现在即可通过认证服务器访问该 API 了。
-
访问
/
。访问结果如下,可以看到请求通过了。
-
访问
/test1
。访问结果如下,可以看到请求被拦截了。
-