KIA0104 - 此主机在服务注册表中没有匹配条目

KIA0104 - This host has no matching entry in the service registry

第一件事:一切似乎都正常工作并且安全策略发挥作用(根据单元测试)...但是 Kiala 方面我遇到了一些问题。

我的所有服务 (ServiceAccount/Service/Deployment) 都在命名空间 'app' 上。

我的网关部署在命名空间 'app' 上。

我的策略 ares 安装在命名空间 'istio-system' 上以正确处理 JWT...

Kiali 错误 > 主机:["authenticator.app.io"]

此规则拒绝所有带有“登录”令牌的请求。

apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
  name: gateway-deny-token-login
  namespace: istio-system
spec:
  selector:
    matchLabels:
      istio: ingressgateway
  action: DENY
  rules:
  - from:
    - source:
        requestPrincipals: ["auth@app.io/*"]
    to:
    - operation:
        hosts: ["authenticator.app.io"]
        paths: ["/auth/login"]

根据:https://kiali.io/docs/features/validations/ 当前验证指出那些引用授权策略命名空间中不存在的主机的规则。 Kiali 考虑服务和服务条目。 那些引用对象命名空间之外的主机的主机将出现未知错误。"

但是“ingressgateway”和 JWT 规则在命名空间“istio-system”上,而我的服务在我的命名空间上。

如何让 Kiali 开心?

感谢您的帮助

我找到了解决办法... 我不知道这是否是“最佳”解决方案,但它确实有效。

1 - 我已经配置 'ingress' 主机:["*"] 用于 HTTP 和 HTTPS 重定向(网关)。

2 - 我没有触及“jwtRules”(RequestAuthentication)的配置。

3 - 我将我所有的“VirtualService”归为一个,并使用“HTTPRoute”公开了我不同“主机”的api。

4 - 我重写了“AuthorizationPolicy”以匹配新的 api 映射。

注意:不要忘记删除旧的“VirtualService”。

之后一切正常,但我不再需要在请求的 header 中指定“主机”,但最重要的是,我不再是 Kiali 错误!