跳转至

微服务网关接入认证服务器

微服务网关支持接入第三方认证服务器。

前提条件

选用认证服务器

默认的认证服务器

  1. 将认证服务器的代码模板克隆到本地。

    git clone https://github.com/projectsesame/envoy-authz-java
    
  2. 直接使用 envoy-authz-java.yaml 以及文件下的默认镜像。

    kubectl apply -f envoy-authz-java.yaml
    

    默认镜像是 release.daocloud.io/skoala/demo/envoy-authz-java:0.1.0

  3. 模板为简单的路径判断,当访问路径为 / 时通过认证,其余路径为拒绝访问。

自定义的认证服务器

  1. 将认证服务器的代码模板克隆到本地。

    git clone https://github.com/projectsesame/envoy-authz-java
    

    该项目分为两个子模块:

    • API 模块是 Envoy 的 protobuf 文件的定义(无需修改)
    • authz-grpc-server 模块是认证服务器的认证逻辑处理地址(在这里填写认证逻辑)
    • release.daocloud.io/skoala/demo/envoy-authz-java:0.1.0
  2. 使用如下命令编译 API 模块,解决找不到的问题

    mvn clean package
    
  3. 成功编译之后,在 check 方法中编写自定义的认证逻辑。

    • check 方法位于 envoy-authz-java/authz-grpc-server/src/main/java/envoy/projectsesame/io/authzgrpcserver/AuthzService.java
    • 模板为简单的路径判断,当访问路径为 / 时通过认证,其余路径为拒绝访问。
  4. 代码编写完成之后,使用 Docker 打包镜像。

    代码模板仓库中已存在 Dockerfile 文件,可以直接使用该模板构建镜像。

  5. 将镜像地址填入 envoy-authz-java.yaml 文件中的 Deployment 下的 spec/template/spec/containers/image 字段。

    填写镜像

接入认证服务器

  1. 在网关所在的集群内创建以下资源。使用 kubectl apply 命令基于 envoy-authz-java.yaml 文件可以一次性快速创建下述三项资源:

    • 认证服务器的 Deployment
    • 认证服务器的 Service
    • 认证服务器的 ExtensionService
  2. 在插件中心接入一个 Auth 插件

    接入地址填写步骤 1 部署的应用外部访问地址,注意该应用的访问协议为 GRPC。

    Auth 插件

配置认证服务器

在网关层面配置

Note

HTTP 和 HTTPS 域名都支持安全认证,如需使用 HTTPS 域名,网关需要开启 HTTPS。

  1. 网关配置认证服务器。

    网关配置认证服务器

  2. 创建 HTTP 或者 HTTPS 域名,以 HTTP 域名为例,此时创建的域名都是默认开启安全认证的,并且无法关闭。

    网关域名认证服务器

  3. 在网关下创建一个 API,关联域名填写刚才新创建的域名,匹配路径为 /,并将 API 上线。API 默认状态是应用域名的安全认证配置,也可以自定义插件的生效与否和附加参数。

    网关 API 认证服务器

  4. 现在即可通过认证服务器访问该 API 了。

    • 访问 /

      curl -H 'header: true' http://gateway.test:30000/
      

      访问结果如下,可以看到请求通过了。

      adservice-springcloud: hello world!
      
    • 访问 /test1

      curl -H 'header: true' http://gateway.test:30000/test1
      

      访问结果如下,可以看到请求被拦截了。

      No permission
      

在域名或 API 层面配置

Note

只有 HTTPS 域名支持安全认证,网关需要开启 HTTPS。

  1. 创建 HTTPS 域名,并手动配置安全认证。

    域名认证服务器

  2. 在网关下创建一个 API,关联域名填写刚才新创建的域名,匹配路径为 /,并将 API 上线。API 默认状态是应用域名的安全认证配置,也可以自定义插件的生效与否和附加参数。

    网关 API 认证服务器

  3. 现在即可通过认证服务器访问该 API 了。

    • 访问 /

      curl -k -H 'header: true' https://gateway.test:30001/
      

      访问结果如下,可以看到请求通过了。

      adservice-springcloud: hello world!
      
    • 访问 /test1

      curl -k -H 'header: true' https://gateway.test:30001/test1
      

      访问结果如下,可以看到请求被拦截了。

      No permission
      

评论