Apache kafka 通过istio出口网关连接到外部Kafka代理
部署在openshift集群中的我的应用程序需要连接到2个外部kafka代理。由于应用程序位于istio网格上,所有出站流量必须通过出口网关。通过SSL上的log4j2 appender连接到kafka。 我进行了以下istio配置:Apache kafka 通过istio出口网关连接到外部Kafka代理,apache-kafka,routes,openshift,istio,Apache Kafka,Routes,Openshift,Istio,部署在openshift集群中的我的应用程序需要连接到2个外部kafka代理。由于应用程序位于istio网格上,所有出站流量必须通过出口网关。通过SSL上的log4j2 appender连接到kafka。 我进行了以下istio配置: kind: ServiceEntry metadata: name: se-kafka spec: hosts: - kafka1.host.com - kafka2.host.com addresses: - 10.200.2
kind: ServiceEntry
metadata:
name: se-kafka
spec:
hosts:
- kafka1.host.com
- kafka2.host.com
addresses:
- 10.200.200.1
- 10.200.200.2
ports:
- name: kafka-port
number: 9093
protocol: TCP
location: MESH_EXTERNAL
resolution: NONE
exportTo:
- .
=====================
kind: DestinationRule
metadata:
name: dr-kafka
spec:
host: egressgateway #name egressgateway deployment
subnets:
- name: se-kafka
=====================
kind: Gateway
metadata:
name: gw-kafka
spec:
servers:
- hosts:
- kafka1.host.com
port:
name: kafka1-egress-port
number: 16001
protocol: TCP
- hosts:
- kafka2.host.com
port:
name: kafka2-egress-port
number: 16002
protocol: TCP
selector:
istio: egressgateway
=======================
kind: VirtualService
metadata:
name: vs-kafka
spec:
hosts:
- kafka1.host.com
- kafka2.host.com
gateways:
- mesh
- gw-kafka
tls:
- match:
- gateways:
- mesh
port: 9093
sniHosts:
- kafka1.host.com
route:
- destination:
host: egressgateway
port:
number: 16001
- match:
- gateways:
- mesh
port: 9093
sniHosts:
- kafka2.host.com
route:
- destination:
host: egressgateway
port:
number: 16002
- match:
- gateways:
- gw-kafka
port: 16001
sniHosts:
- kafka1.host.com
route:
- destination:
host: kafka1.host.com
port:
number: 9093
- match:
- gateways:
- gw-kafka
port: 16002
sniHosts:
- kafka2.host.com
route:
- destination:
host: kafka2.host.com
port:
number: 9093
========================
它起作用了。但我认为交通绕过了istio出口网关。在kiali中,ServiceEntry和ExpressGateway之间没有连接。如果查看出口网关日志,可以看到以下警告:
gRPC config for envoy.api.v2.ClusterLoadAssigment rejected: malformed IP address: kafka1.host.com. Consider setting resolver_name or setting cluster type to 'STRICT_DNS' or 'LOGICAL_DNS'
问题是什么?如何正确配置出口网关?也许应该在服务条目中将解析设置为DNS?看看你的istio版本是什么?根据警告,入口似乎无法解析此DNS名称。在与
kafka1.host.com
和kafka1.host.com
通话时,您可能需要添加一个说明“不要使用TLS”,因为该播客中没有侧车。@Jakub如何检查istio版本kafka1.host.com
和kafka2.host.com
不是Pods,而是在openshift之外工作的代理。您是否建议设置以下值trafficPolicy.tls.mode=DISABLE?但实际上,连接使用SSL协议,这不会影响吗?您可以使用istioctl version
检查istio版本。您是否可以首先尝试将您的服务条目解析从Joel提到的解析:无
更改为解析:DNS
?通过DNS解析,网关执行DNS查询以获取外部服务的IP地址,并将流量定向到该IP地址。如果这不起作用,你可以检查这个,如果你有多个主机,建议做两个网关。如果这不起作用,我会检查它是否能与任何tls模式下的目标规则一起工作,只是为了测试它是否有用。@Jakub我不能安装istioctl,我只有oc。所以我尝试了所有这些,但没有任何改变。我在理论部分贴了更多的新问题,以帮助我理解