我是 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 配置中缺少什么? 请指教。
谢谢。
这里的常见问题解答涵盖了您的问题。基本上,您无法启用 STRICT mTLS,因为非网格工作负载没有有效的 Istio 工作负载证书。
在这种情况下,解决方案之一是启用 PERMISSIVE 模式。