我一直在努力使这种情况起作用。我要命名空间:
从第三个名称空间(默认)开始,我可以使用以下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命名空间。有什么想法吗?
答案 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
另外看看这个链接