【问题标题】:Istio JWT authentication passes traffic without tokenIstio JWT 身份验证在没有令牌的情况下传递流量
【发布时间】:2019-08-09 18:07:21
【问题描述】:

背景:

有一个类似的问题:Here,但它没有为我的问题提供解决方案。

我已经为我的 Istio 集群部署了一个按预期工作的应用程序。我想启用 JWT 身份验证,因此将指令 Here 调整为我的用例。

入口网关:

我首先将以下策略应用于 istio-ingressgateway。这行得通,任何没有 JWT 令牌的流量都被阻止了。

kubectl apply -n istio-system -f mypolicy.yaml
apiVersion: authentication.istio.io/v1alpha1
kind: Policy
metadata:
  name: core-api-policy
  namespace: istio-system
spec:
  targets:
  - name: istio-ingressgateway
    ports:
    - number: 80
  origins:
  - jwt:
      issuer: "https://cognito-idp.ap-northeast-1.amazonaws.com/ap-northeast-1_pa9vj7sbL"
      jwksUri: "https://cognito-idp.ap-northeast-1.amazonaws.com/ap-northeast-1_pa9vj7sbL/.well-known/jwks.json"
  principalBinding: USE_ORIGIN

一旦成功,我就删除了此政策并为我的服务安装了新政策。

kubectl delete -n istio-system -f mypolicy.yaml

service/core-api-service:

编辑上述策略后,更改命名空间和目标如下,我将策略重新应用到正确的命名空间。

政策:

kubectl apply -n solarmori -f mypolicy.yaml
apiVersion: authentication.istio.io/v1alpha1
kind: Policy
metadata:
  name: core-api-policy
  namespace: solarmori
spec:
  targets:
  - name: core-api-service
    ports:
    - number: 80
  origins:
  - jwt:
      issuer: "https://cognito-idp.ap-northeast-1.amazonaws.com/ap-northeast-1_pa9vj7sbL"
      jwksUri: "https://cognito-idp.ap-northeast-1.amazonaws.com/ap-northeast-1_pa9vj7sbL/.well-known/jwks.json"
  principalBinding: USE_ORIGIN

服务:

apiVersion: v1
kind: Service
metadata:
  name: core-api-service
spec:
  type: LoadBalancer
  ports:
  - port: 80
    name: api-svc-port
    targetPort: api-app-port
  selector:
    app: core-api-app

此操作的结果似乎并未改变流量处理中的任何内容。即使我没有提供 JWT,我仍然可以访问我的服务。

我检查了我的服务部署的 istio-proxy,没有在日志中创建 local_jwks,如 Here 所述。

[procyclinsur@P-428 istio]$ kubectl logs -n solarmori core-api-app-5dd9666777-qhf5v -c istio-proxy | grep local_jwks
[procyclinsur@P-428 istio]$

如果有人知道我哪里出错了,我将不胜感激。

【问题讨论】:

    标签: kubernetes jwt istio


    【解决方案1】:

    要使 Service 成为 Istio 服务网格的一部分,您需要满足一些要求,如官方 docs 所示。

    在您的情况下,服务端口名称需要更新为: <protocol>[-<suffix>]<protocol> 之一:

    • grpc
    • http
    • http2
    • https
    • 蒙哥
    • mysql
    • redis
    • tcp
    • tls
    • udp

    此时转发到服务的请求将通过服务网格;目前,请求由 Kubernetes 网络解决。

    【讨论】:

    • 哇...您会认为检查此问题的注释会在故障排除部分中...花了 2 天时间尝试使其正常工作!谢谢!!
    猜你喜欢
    • 2019-05-22
    • 1970-01-01
    • 2020-05-05
    • 2019-05-10
    • 1970-01-01
    • 2018-04-14
    • 1970-01-01
    • 2018-02-23
    • 2017-10-22
    相关资源
    最近更新 更多