0

问题:由于某种原因,客户端 pod 只能解析完全限定的完全限定 DNS 名称,包括集群服务后缀。

这个问题在这个问题中说明了: AKS, WINdows Node, dns does not resolve service until fully qualified name is used

为了解决这个问题,我使用了 useServiceDnsDomain 标志。文档(https://strimzi.io/docs/operators/master/using.html#type-GenericKafkaListenerConfiguration-schema-reference)将其解释为

配置是否应使用 Kubernetes 服务 DNS 域。如果设置为 true,则生成的地址包含服务 DNS 域后缀(默认为 .cluster.local,可以使用环境变量 KUBERNETES_SERVICE_DNS_DOMAIN 进行配置)。默认为 false。此字段只能与内部类型侦听器一起使用。

我的部分yaml如下

apiVersion: kafka.strimzi.io/v1beta1
kind: Kafka
metadata:
  name: tt-kafka
  namespace: shared
spec:
  kafka:
    version: 2.5.0
    replicas: 3
    listeners:
      - name: local
        port: 9092
        type: internal
        tls: false
        useServiceDnsDomain: true

这没有做任何事情,所以我也尝试添加 KUBERNETES_SERVICE_DNS_DOMAIN 如下所示

template:
  kafkaContainer:
    env:
      - name: KUBERNETES_SERVICE_DNS_DOMAIN
        value: .cluster.local

srimzi/operator:0.20.0 图像正在使用中。

在我的客户端(.net Confluent.Kafka 1.4.4)中,我使用 tt-kafka-kafka-bootstrap.shared.svc.cluster.local 作为 BootstrapServers。它给了我错误

错误:GroupCoordinator:无法解析“tt-kafka-kafka-2.tt-kafka-kafka-brokers.shared.svc:9092”:不知道这样的主机。

我期望代理服务向客户端提供全名,但从错误看来 useServiceDnsDomain 没有效果。

任何帮助表示赞赏。谢谢。

4

1 回答 1

0

正如https://github.com/strimzi/strimzi-kafka-operator/issues/3898中所描述的,文档中有错字。正确的 YAML 是:

  listeners:
    - name: plain
      port: 9092
      type: internal
      tls: false
      configuration:
        useServiceDnsDomain: true

如果您的域不同于.cluster.local,则可以使用KUBERNETES_SERVICE_DNS_DOMAINenv var 覆盖它。但是您必须在 Strimzi Cluster Operator pod 上对其进行配置。不在 Kafka pod 上:https ://strimzi.io/docs/operators/latest/full/using.html#ref-operator-cluster-str

于 2020-10-30T13:30:09.950 回答