奇怪的事情正在发生!
我的集群中有一个KeyCloak和一个简单的Httpbin应用程序。
我已经将Istio设置为使用keyCloak验证用户(如Istio留档中所述)
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>
我得到源认证失败
这是完全正常的,因为我没有提供任何访问令牌。
现在,当我使用我的网络浏览器访问应用程序时,我预计会出现某种错误,但不,它有效……
我的问题是它不应该工作。浏览器没有比curl命令更授权…
有关信息,我使用kubectl port-正向
和反向代理从浏览器访问应用程序。
kubectl port-转发
将流量从您机器的localhost直接转发到k8 pod,绕过所有Istio身份验证。当您针对httpbin的公共ip运行curl
时,请求由Istio的网关处理,并验证jwt令牌。
Istio的jwt验证发生在下游,独立于您的pod。如果您直接访问pod,则出于开发目的故意绕过最终用户身份验证。这使您可以开发独立于身份验证方式的服务。
我找到了一种方法来解决这个问题…如果我使用网关访问应用程序,那么浏览器也会得到Origin Authentiation失败
。
但这并不能解释为什么浏览器首先绕过istio的策略而curl没有…