Istio JWT身份验证无需令牌即可传递流量

时间:2019-03-19 09:10:39

标签: kubernetes jwt istio

背景

有一个类似的问题:Here,但它没有解决我的问题。

我已经部署了一个可以按我的Istio Cluster运行预期的应用程序。我想启用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

服务/核心API服务:

在编辑了以上策略之后,如下更改了名称空间和目标,我将策略重新应用于正确的名称空间。

政策:

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]$

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

1 个答案:

答案 0 :(得分:2)

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

根据您的情况,服务端口名称需要更新为:  <protocol>[-<suffix>],其中http,http2,grpc,mongo或redis为<protocol>

那时,转发给服务的请求将通过服务网格,当前,请求由Kubernetes网络解决。