从启用istio的名称空间到另一个名称空间的Istio流量

时间:2020-07-27 20:52:35

标签: networking kubernetes google-kubernetes-engine istio

我一直在努力使这种情况起作用。我要命名空间:

  • 名称空间:mongodb(已禁用Istio,它实际上是在此处具有集群的mongodb运算符)
  • 命名空间:应用(已启用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命名空间。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

使用istio注入数据库很复杂。在istio中,您可以不注入而设置数据库,然后使用ServiceEntry对象将其添加到Istio注册表中,这样它就可以与其余istio服务进行通信。 正如我在评论中提到的,我建议尝试在没有externalName的情况下尝试执行此操作,因为没有针对该文件的特定文档。

要将mongodb数据库添加到istio,可以使用ServiceEntry

ServiceEntry可以将其他条目添加到Istio的内部服务注册表中,以便网格中自动发现的服务可以访问/路由到这些手动指定的服务。服务条目描述服务的属性(DNS名称,VIP,端口,协议,端点)。这些服务可能在网状网络外部(例如,Web API)或不在网状网络服务注册表中的网状内部内部服务(例如,一组与Kubernetes中的服务进行通信的VM)。另外,还可以通过使用工作负载选择器字段动态选择服务条目的端点。这些端点可以是使用WorkloadEntry对象或Kubernetes容器声明的VM工作负载。在单个服务下同时选择Pod和VM的能力允许将服务从VM迁移到Kubernetes,而不必更改与服务关联的现有DNS名称。

ServiceEntry示例

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

另外看看这个链接