首页 > 解决方案 > 从启用 istio 的命名空间到另一个命名空间的 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: {}

虚拟服务+服务

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 命名空间。有任何想法吗?

标签: networkingkubernetesgoogle-kubernetes-engineistio

解决方案


使用 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

另外看看这个链接


推荐阅读