具有相互 tls 的外部数据库的 Istio ServiceEntry,无法连接到数据库服务
Istio ServiceEntry for outside db with mutual tls, cannot connect to db service
我正在使用 istio 1.0.2 版本 和 istio-demo-auth.yaml,我在 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
服务日志显示“登录前错误:主机 mssql-master 端口 2433 读取登录前响应时出错:连接重置 ClientConnectionId:”,似乎根本没有到达 mssql。如何为相互 tls 服务配置外部集群数据库?
如@SmileSees 所述,该问题已通过禁用目标 mssql
实例的双向 TLS 身份验证得到解决。由于数据库实例位于 Istio 网格之外,并且没有为该服务注入 sidecar Envoy
,因此未建立 TLS 安全连接。
您可以考虑使用 SPIFFE 框架来保护异构环境中的服务。
进一步研究的参考链接:
我正在使用 istio 1.0.2 版本 和 istio-demo-auth.yaml,我在 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
服务日志显示“登录前错误:主机 mssql-master 端口 2433 读取登录前响应时出错:连接重置 ClientConnectionId:”,似乎根本没有到达 mssql。如何为相互 tls 服务配置外部集群数据库?
如@SmileSees 所述,该问题已通过禁用目标 mssql
实例的双向 TLS 身份验证得到解决。由于数据库实例位于 Istio 网格之外,并且没有为该服务注入 sidecar Envoy
,因此未建立 TLS 安全连接。
您可以考虑使用 SPIFFE 框架来保护异构环境中的服务。
进一步研究的参考链接: