我有一个由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集群,我们无法控制?谢谢!
1条答案
按热度按时间mzmfm0qo1#
为了允许客户端访问各个代理,Strimzi需要为每个代理创建一个
type: LoadBalancer
服务。此外,它还创建了一个针对所有代理的服务用于引导(可以禁用)。这通常会导致Kubernetes为每个服务提供一个负载均衡器-〉,因此不需要使用端口号进行任何复杂的黑客攻击。如果你的环境不支持这样的负载均衡器,也许最好的办法是尝试其他暴露Kafka集群的机制之一。例如NodePorts或Kubernetes Nginx Ingress。
你也可以自己做,如果你想:
type: loadbalancer
监听器advertisedHost
和advertisedPort
选项配置要用于每个代理的主机名和端口