奇怪的事情正在发生!
我的集群中有一个 Keycloak 和一个简单的 Httpbin 应用程序。
我已设置 Istio 以使用密钥斗篷来验证用户身份(如Istio documentation中所述)
apiVersion: "authentication.istio.io/v1alpha1"
kind: "Policy"
metadata:
name: auth-token
spec:
targets:
- name: httpbin
origins:
- jwt:
issuer: "http://10.233.11.203/auth/realms/istio"
jwksUri: "http://10.233.11.203/auth/realms/istio/protocol/openid-connect/certs"
principalBinding: USE_ORIGIN
尝试以下配置时:
curl <IP_OF_HTTPBIN>
我得到Origin authentification failed
,这是完全正常的,因为我没有提供任何访问令牌。
现在,当我使用我的网络浏览器访问应用程序时,我会期望出现某种错误,但是不行...
我的问题是它不起作用。浏览器未获得更多授权,因此curl命令已...
有关信息,我使用kubectl port-forward
和反向代理从浏览器访问该应用程序。
答案 0 :(得分:1)
kubectl port-forward
绕过所有Istio身份验证,将流量从计算机的本地主机直接转发到k8 pod。当您针对httpbin的公共IP运行curl
时,该请求将由Istio的网关处理,并且jwt令牌将得到验证。
Istio的jwt验证发生在下游并且独立于您的pod。如果您直接击中Pod,则出于开发目的,您有意绕过最终用户身份验证。这样,您可以独立于认证方式开发服务。
答案 1 :(得分:0)
我找到了解决此问题的方法...如果我使用网关访问该应用程序,则浏览器也会获得Origin authentification failed
。
但这并不能解释为什么浏览器首先绕过istio的策略,而curl却没有...