ISTIO政策问题

时间:2019-11-08 00:20:37

标签: prometheus istio

我有一个K8s Prometheus服务,该服务使用两个不同的端口映射到同一targetPort,并且我想仅将身份验证策略应用于一个端口。这个想法是要能够通过jwt身份验证(使用网关/虚拟服务)将服务公开到网格外部,并具有不通过身份验证的内部版本(我需要它,因为网格内部有一个不支持jwt的客户端身份验证)。

尽管我的策略将目标定义为第一个端口,但该策略影响两个端口。以下是更多详细信息

  1. 服务

      

    prometheus服务ClusterIP 10.233.31.30           9095 / TCP,9090 / TCP 22d

可以看出,有两个端口9095和9090分别命名为http-port1和http-port-2

  1. 政策

我在下面创建了一个策略,该策略仅定义第一个端口的目标http-port1。

Name:         prometheus-auth-policy
Namespace:    powerone-ns
API Version:  authentication.istio.io/v1alpha1
Kind:         Policy
Spec:
  Origins:
    Jwt:
      Issuer:    testing@secure.istio.io
      Jwks Uri:  https://raw.githubusercontent.com/istio/istio/release-1.3/security/tools/jwt/samples/jwks.json
  Peers:
    Mtls:
  Principal Binding:  USE_ORIGIN
  Targets:
    Name:  prometheus-service
    Ports:
      Name:  http-port1

使用istioctl命令,可以看到策略似乎已正确应用。例如,运行命令。/istioctl authn tls-check prometheus-bb6f66586-ffwml -n powerone-ns 我可以看到我的策略仅应用于第一个服务,第二个仅使用默认的。

               HOST:PORT                                                            STATUS       SERVER        CLIENT                 AUTHN POLICY                             DESTINATION RULE
prometheus-service01.prometheus-service.svc.cluster.local:9090                       OK           mTLS          mTLS       prometheus-auth-policy/prometheus-service     default/prometheus-service
prometheus-service02.prometheus-service.svc.cluster.local:9095                       OK           HTTP/mTLS     mTLS       default/                                      default/pprometheus-service

当我在两个端口上查询服务而没有通知任何令牌时,我能够正常连接,这是错误的,因为该策略应要求使用JWT令牌。删除第二个端口后,查询失败,并出现预期的401错误(原始身份验证失败。),因为我没有通知任何令牌。因此,似乎ISTIO不遵守我政策中的目标信息。

我也尝试了这种方法的变体。我的意思是,我没有创建具有两个不同端口的服务,而是创建了两个不同的服务(每个端口一个),但是发生了相同的问题。

从我的角度来看,它看起来像个错误。

0 个答案:

没有答案