如何为Strimzi创建的Kafka bootstrap和broker使用不同的负载均衡器端口?

cld4siwp  于 2023-04-19  发布在  Apache
关注(0)|答案(1)|浏览(155)

我有一个由Rancher Desktop创建的本地k3 s Kubernetes集群。
我正在尝试使用基于this tutorial的负载均衡器来设置Kafka,以便在Kubernetes之外运行的客户端可以访问它。
以下是我的步骤:

kubectl create namespace hm-kafka
kubectl apply --filename="https://strimzi.io/install/latest?namespace=hm-kafka" --namespace=hm-kafka
kubectl apply --filename=my-kafka-persistent.yaml --namespace=hm-kafka

my-kafka-persistent.yaml(基于kafka-persistent.yaml):

apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
metadata:
  name: hm-kafka
spec:
  kafka:
    version: 3.4.0
    replicas: 3
    listeners:
      - name: plain
        port: 9092
        type: internal
        tls: false
      - name: tls
        port: 9093
        type: internal
        tls: true
      - name: external
        port: 9094
        type: loadbalancer
        tls: false
        configuration:
          brokers:
            - broker: 0
              advertisedPort: 9095
            - broker: 1
              advertisedPort: 9096
            - broker: 2
              advertisedPort: 9097
    config:
      offsets.topic.replication.factor: 3
      transaction.state.log.replication.factor: 3
      transaction.state.log.min.isr: 2
      default.replication.factor: 3
      min.insync.replicas: 2
      inter.broker.protocol.version: "3.4"
    storage:
      type: jbod
      volumes:
        - id: 0
          type: persistent-claim
          size: 100Gi
          deleteClaim: false
  zookeeper:
    replicas: 3
    storage:
      type: persistent-claim
      size: 100Gi
      deleteClaim: false
  entityOperator:
    topicOperator: {}
    userOperator: {}

当我部署时,我遇到了这个问题
Pod:

服务项目:

这是因为我的YAML文件中的advertisedPort选项并没有真正改变负载均衡器本身使用的端口。它只改变了advertised.listeners Kafka broker配置参数中使用的端口号。
它们都尝试使用端口9094。
我想知道是否有一种方法可以改变负载均衡器端口,以便引导和代理具有不同的端口?这将有助于Kafka工作?谢谢!
另外,我看到另一个类似的问题及其answer,这是否意味着使用哪个端口取决于Rancher Desktop创建的k3 s Kubernetes集群,我们无法控制?谢谢!

mzmfm0qo

mzmfm0qo1#

为了允许客户端访问各个代理,Strimzi需要为每个代理创建一个type: LoadBalancer服务。此外,它还创建了一个针对所有代理的服务用于引导(可以禁用)。这通常会导致Kubernetes为每个服务提供一个负载均衡器-〉,因此不需要使用端口号进行任何复杂的黑客攻击。
如果你的环境不支持这样的负载均衡器,也许最好的办法是尝试其他暴露Kafka集群的机制之一。例如NodePorts或Kubernetes Nginx Ingress。
你也可以自己做,如果你想:

  • 配置一个常规的内部监听器,而不是type: loadbalancer监听器
  • 使用advertisedHostadvertisedPort选项配置要用于每个代理的主机名和端口
  • 使用您想要的任何配置(例如矶钓)创建您自己的服务(确保服务具有一些自定义名称并且没有Strimzi标签,以避免它们被Strimzi删除或覆盖)

相关问题