Apache kafka 通过istio出口网关连接到外部Kafka代理

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

部署在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.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。所以我尝试了所有这些,但没有任何改变。我在理论部分贴了更多的新问题,以帮助我理解