带有 SSL 的 Haproxy 后端无法与 Istio Mesh 通信

问题描述 投票:0回答:1

我是 Kubernetes 新手,需要一些帮助。

我正在运行一个 Istio 网格,其中我的所有服务都使用 mtls。这些都是grpc服务。这是我在命名空间内的 PeerAuthentication:

    apiVersion: security.istio.io/v1beta1
kind: PeerAuthentication
metadata:
  name: "default"
  namespace: db1

spec:
  mtls:
    mode: STRICT

这是我的服务:

 ➜  ~ kubectl -n db1 get svc
NAME                      TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)              AGE
db1                ClusterIP   10.100.114.234   <none>        19530/TCP,9091/TCP   62m

我的网格内的 Pod 运行良好并且可以说话。 我想要一个位于不同命名空间和网格之外的 Haproxy 与我的 db1 服务进行通信。

由于 db1 是一个 grpc 服务,所以我有这个 Haproxy 配置:

global
    log stdout format raw local0 info
    maxconn 1024
    
  defaults
    log global
    mode http
    timeout client 60s
    timeout connect 60s
    timeout server 60s


  frontend fe_main
    
    bind *:19530 proto h2
    mode http
    
    http-request capture req.hdr(Host) len 100
  
      
    default_backend be_db1
  
  backend be_db1
    mode http 
    server-template db1-milvus 1 db1.db1.svc.cluster.local:19530 check proto h2 ssl verify none crt /etc/certs/shared/db1_haproxy_certs.pem

我没有看到任何请求从 Haproxy 发送到我的 db1 服务。但是,如果我禁用 Istio 网格内的 MTL 并删除 Haproxy 中的 ssl crt 部分,我确实会看到成功的连接。

我的 Haproxy ssl 配置中缺少什么? 请指教。

谢谢。

kubernetes istio haproxy
1个回答
0
投票

这里的常见问题解答涵盖了您的问题。基本上,您无法启用 STRICT mTLS,因为非网格工作负载没有有效的 Istio 工作负载证书。

在这种情况下,解决方案之一是启用 PERMISSIVE 模式。

© www.soinside.com 2019 - 2024. All rights reserved.