Istio 实现 ext-authz 外部扩展鉴权以及对接基于 k8s 的微服务

Istio 实现 ext-authz 外部扩展鉴权以及对接基于 k8s 的微服务

可以实现基于 redistoken 鉴权以及实现 rbac 鉴权。

转载请注明来源:https://janrs.com/vrsr


Istio 的外部鉴权本质是基于 Envoy 实现的,直接看 Envoy 的代码,链接地址:点击自动跳转

Isio 官方的 Demo 代码,链接:点击自动跳转

实现

Istio 提供了基于 HTTP 方式以及 Grpc 方式的外部鉴权扩展,这里这实现了 Grpc

配置

修改 IstioConfigmap 配置。在 mesh 字段下面添加以下代码配置:

extensionProviders:
    - name: "rgrpc-dev-authz-grpc-provider"
      envoyExtAuthzGrpc:
        service: "auth.rgrpc-dev.svc.cluster.local"
        port: 50051

截图如下

创建 Istio 鉴权 Grpc 服务

本质上,Istio 的外部鉴权是基于 Evnoy 实现,只需要实现了 EnvoyGrpc 方法后 Istio 就会自动调用。

需要实现的 Envoyexternal_auth.pb.go文件 链接:点击自动跳转

只需要实现里面的 Check 方法即可。Envoy 官方提供了 v2 以及 v3 代码的实现,这里我只实现了 v3 的接口。

写好代码后将服务做成镜像部署到 k8s

案例代码如下:

package serverV1

import (
	"encoding/json"
	authv3 "github.com/envoyproxy/go-control-plane/envoy/service/auth/v3"
	typev3 "github.com/envoyproxy/go-control-plane/envoy/type/v3"
	"github.com/go-kit/log"
	"github.com/go-kit/log/level"
	"github.com/redis/go-redis/v9"
	"google.golang.org/genproto/googleapis/rpc/status"
	"google.golang.org/grpc/codes"

	"authservice/config"
	"golang.org/x/net/context"
)

type Server struct {
   
	authv3.UnimplementedAuthorizationServer
	conf   *config.Config
	redis  *redis.Client
	repo   *Repository
	logger log.Logger
}

func NewServer(
	conf *config.Config,
	redis *redis.Client,
	repo *Repository,
	logger log.Logger,
) authv3.AuthorizationServer {
   
	return &Server{
   
		conf:   conf,
		redis:  redis,
		repo:   repo,
		logger: logger,
	}
}

var<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值