奇怪的事情正在发生!
我的群集中有一个Keycloak和一个简单的Httpbin应用程序。
我已经设置了Istio来使用keycloak验证用户(如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
和反向代理从我的浏览器访问应用程序。
kubectl port-forward
将流量从您机器的localhost直接转发到k8 pod,绕过所有Istio身份验证。当您针对httpbin的公共IP运行curl
时,请求由Istio的网关处理并验证jwt令牌。
Istio的jwt验证发生在下游并独立于您的pod。如果直接点击您的pod,则会故意绕过最终用户身份验证以进行开发。这使您可以独立于身份验证方式开发服务。
我找到了解决这个问题的方法......如果我使用网关访问应用程序,那么浏览器也会获得Origin authentification failed
。
但这并没有解释为什么首先浏览器绕过istio的政策并且卷曲不...