如何为KNative服务添加HTTP认证?(Traefik迁移至Istio场景)
问题:KNative Serving迁移中替代Traefik BasicAuth的轻量方案
背景
我正计划将部分K8s应用迁移至KNative Serving,这意味着要改用Istio Ingress Gateway替代Traefik Ingress。但在迁移HTTP基础认证功能时遇到了问题——原本在Traefik中,我通过Ingress资源的middleware注解实现了用户需提供正确用户名密码才能访问Pod的限制。
我的核心需求是按服务配置认证规则:部分服务无需认证,部分服务需要对接不同的Secret资源来完成身份校验。想请教有没有合适的方案来实现这个需求。
已调研的方案
我已经了解了两种可行方案:
- 配置Istio网关对接外部认证服务
- 为服务添加sidecar容器,在请求转发到业务容器前完成认证
但这两种方案都显得过重,我希望能找到更轻量的实现方式,也愿意切换认证方案,只要能满足按服务指定不同Secret的要求。
尝试后的问题
我曾尝试为每个服务添加认证EnvoyFilter来检查请求头,但这导致了KNative Activator的探针失败,报错信息如下:
{"severity":"ERROR","timestamp":"2023-11-02T06:44:48.95474761Z","logger":"activator","caller":"net/revision_backends.go:398","message":"Failed to probe clusterIP 172.20.137.61:80","commit":"f60eb32","knative.dev/controller":"activator","knative.dev/pod":"activator-575d6749db-r9mdm","knative.dev/key":"kn-test/echo-server-00001","error":"unexpected status code: want [200], got 401","stacktrace":"knative.dev/serving/pkg/activator/net.(*revisionWatcher).checkDests\n\tknative.dev/serving/pkg/activator/net/revision_backends.go:398\nknative.dev/serving/pkg/activator/net.(*revisionWatcher).run\n\tknative.dev/serving/pkg/activator/net/revision_backends.go:443"}
现在我意识到认证检查不应该放在KNative内部,或许应该在Istio Ingress Gateway的入口处配置,目前还在进一步研究中。
内容的提问来源于stack exchange,提问作者Chuan Ye
相关产品推荐
相关产品推荐

