networking - 从启用 istio 的命名空间到另一个命名空间的 Istio 流量
问题描述
我一直在努力使这种情况发挥作用。我必须命名空间:
- namespace: mongodb (Istio 禁用,这里其实是一个带集群的 mongodb 算子)
- 命名空间:app(已启用 Istio)
从第三个命名空间,比如默认,我可以使用 fqnd 到达 mongodb 端点:mongodb-standalone-0.mongodb-standalone-svc.mongodb.svc.cluster.local
但是从启用了 istio 的应用程序命名空间中,我尝试了以下操作但没有成功:
外部名称服务
kind: "Service"
apiVersion: "v1"
metadata:
namespace: app
labels:
app: mongodb
service: mongodb
name: mongodb
spec:
type: ExternalName
externalName: mongodb-standalone-0.mongodb-standalone-svc.mongodb.svc.cluster.local
ports:
- port: 27017
status:
loadBalancer: {}
- ping 有效,但到端口 27017 的流量无效
虚拟服务+服务
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: mongodb
spec:
hosts:
- mongodb
tcp:
- route:
- destination:
host: mongodb-standalone-0.mongodb-standalone-svc.mongodb.svc.cluster.local
subset: v1
---
kind: "Service"
apiVersion: "v1"
metadata:
namespace: app
labels:
app: mongodb
service: mongodb
name: mongodb
spec:
ports:
- name: "tcp-mongodb"
port: 27017
targetPort: 27017
status:
loadBalancer: {}
服务入口:
apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
name: mongodb
spec:
hosts:
- mongodb-standalone-0.mongodb-standalone-svc.mongodb.svc.cluster.local
#- mongodb
ports:
- number: 27017
name: tcp-mongodb
protocol: TCP
location: MESH_EXTERNAL
resolution: DNS
endpoints:
- address: mongodb-standalone-0.mongodb-standalone-svc.mongodb.svc.cluster.local
但似乎没有什么有助于从启用 Istio 的命名空间到达 mongodb 命名空间。有任何想法吗?
解决方案
使用 istio 注入数据库很复杂。在 istio 中,您可以在不注入的情况下设置数据库,然后使用 ServiceEntry 对象将其添加到 Istio 注册表中,以便它能够与其余的 istio 服务进行通信。正如我在评论中提到的,我建议在没有 externalName 的情况下尝试这样做,因为没有具体的文档。
要将您的 mongodb 数据库添加到 istio,您可以使用ServiceEntry。
ServiceEntry 允许将额外的条目添加到 Istio 的内部服务注册表中,以便网格中自动发现的服务可以访问/路由到这些手动指定的服务。服务条目描述了服务的属性(DNS 名称、VIP、端口、协议、端点)。这些服 此外,还可以使用workloadSelector 字段动态选择服务条目的端点。这些端点可以是使用 WorkloadEntry 对象或 Kubernetes pod 声明的 VM 工作负载。
服务入口示例
apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
name: external-svc-mongocluster
spec:
hosts:
- mymongodb.somedomain # not used
addresses:
- 192.192.192.192/24 # VIPs
ports:
- number: 27018
name: mongodb
protocol: MONGO
location: MESH_INTERNAL
resolution: STATIC
endpoints:
- address: 2.2.2.2
- address: 3.3.3.3
如果您启用了 mtls(自 istio 1.5 版本起默认启用),您还需要 DestinationRule 来定义如何与外部服务通信。
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: mtls-mongocluster
spec:
host: mymongodb.somedomain
trafficPolicy:
tls:
mode: MUTUAL
clientCertificate: /etc/certs/myclientcert.pem
privateKey: /etc/certs/client_private_key.pem
caCertificates: /etc/certs/rootcacerts.pem
另外看看这个链接
推荐阅读
- python - 如何通过 Jupyter 中的 Python 命令与串行 com 端口通信?
- wordpress - Wordpress post date hook
- java - 在 mule 3 中进行数据转换时面临的问题
- html - 选择选项的 CSS 设置字体系列不起作用
- mysql - 在 MySQL 中创建嵌套触发器
- python - 是否有基于索引和列的 Pandas 方法加入?
- python - pandas groupby sum 和 agg
- java - 无法连接到远程 mariaDB
- node.js - PM2 集群模式是否在一个进程中处理 WebSocket?
- python - 根据时间对奇怪的数据结构进行排序,python 3.7