我正在使用带有 istio 1.0.2 version 的 istio 1.0.2 version ,我在k8s集群之外有一个mssql数据库,我想从istio注入的服务连接它 . 我尝试使用这个Consuming External TCP Services博客,但服务无法连接到外部的mssql实例 . 服务条目如下:
---
apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
name: mssql-entry
namespace: multitenancy
spec:
hosts:
- mssql-master
addresses:
- $outside-db-ip/32
ports:
- number: 2433
name: db
protocol: TCP
location: MESH_EXTERNAL
resolution: STATIC
endpoints:
- address: $outside-db-ip
ports:
tcp: 2433
---
apiVersion: v1
kind: Service
metadata:
name: mssql-master
namespace: multitenancy
labels:
app: v1
spec:
ports:
- port: 2433
targetPort: 2433
protocol: TCP
---
apiVersion: v1
kind: Endpoints
metadata:
name: mssql-master
namespace: multitenancy
subsets:
- addresses:
- ip: $outside-db-ip
ports:
- port: 2433
protocol: TCP
并且服务的日志显示“Prelogin错误:主机mssql-master端口2433错误读取prelogin响应:连接重置ClientConnectionId:”,似乎根本没有到达mssql . 如何为相互tls服务配置外部集群db?
1 回答
正如@SmileSees所提到的,通过禁用目标
mssql
实例的相互TLS身份验证已解决该问题 . 由于数据库实例位于Istio网格之外且没有为此服务注入sidecar Envoy
,因此未 Build TLS安全连接 .您可以考虑使用SPIFFE框架来跨异构环境保护服务 .
参考链接供进一步研究:
Mutual TLS authentication
Authorization policy
Istio security vs SPIFFE