14.5. 使用 loadbalancers 访问 Kafka
使用 loadbalancers 从 OpenShift 集群外部客户端访问 Kafka 集群。
要连接到代理,您可以为 Kafka bootstrap 地址指定主机名和端口号,以及用于 TLS 加密的证书。
该流程显示基本的 loadbalancer 侦听器配置。您可以使用监听程序属性启用 TLS 加密(tls)并指定客户端身份验证机制(身份验证)。使用 配置属性 添加额外的配置。例如,您可以在 loadbalancer 监听器中使用以下配置属性:
loadBalancerSourceRanges- 将流量限制为指定的 CIDR 列表(Classless Inter-Domain Routing)范围。
externalTrafficPolicy- 指定服务是否将外部流量路由到节点本地端点还是集群范围的端点。
loadBalancerIP- 在创建负载均衡器时请求特定的 IP 地址。
有关监听器配置的更多信息,请参阅 GenericKafkaListener 模式参考。
先决条件
- 正在运行的 Cluster Operator
在此过程中,Kafka 集群名称是 my-cluster。侦听器的名称是 external3。
流程
配置一个
Kafka资源,并将外部监听程序设置为loadbalancer类型。例如:
apiVersion: kafka.strimzi.io/v1beta2 kind: Kafka metadata: labels: app: my-cluster name: my-cluster namespace: myproject spec: kafka: # ... listeners: - name: external3 port: 9094 type: loadbalancer tls: true authentication: type: tls # ... # ... zookeeper: # ...创建或更新资源。
oc apply -f <kafka_configuration_file>在 secret
my-cluster-cluster-ca-cert中还创建了用于验证 kafka 代理身份的集群 CA 证书。为每个 Kafka 代理创建
loadbalancer类型服务和负载均衡器,以及外部 bootstrap 服务。为 bootstrap 和代理创建的 LoadBalancer 服务和负载均衡器
NAME TYPE CLUSTER-IP PORT(S) my-cluster-kafka-external3-0 LoadBalancer 172.30.204.234 9094:30011/TCP my-cluster-kafka-external3-1 LoadBalancer 172.30.164.89 9094:32544/TCP my-cluster-kafka-external3-2 LoadBalancer 172.30.73.151 9094:32504/TCP my-cluster-kafka-external3-bootstrap LoadBalancer 172.30.30.228 9094:30371/TCP NAME EXTERNAL-IP (loadbalancer) my-cluster-kafka-external3-0 a8a519e464b924000b6c0f0a05e19f0d-1132975133.us-west-2.elb.amazonaws.com my-cluster-kafka-external3-1 ab6adc22b556343afb0db5ea05d07347-611832211.us-west-2.elb.amazonaws.com my-cluster-kafka-external3-2 a9173e8ccb1914778aeb17eca98713c0-777597560.us-west-2.elb.amazonaws.com my-cluster-kafka-external3-bootstrap a8d4a6fb363bf447fb6e475fc3040176-36312313.us-west-2.elb.amazonaws.com用于客户端连接的 bootstrap 地址传播到
Kafka资源的status。bootstrap 地址的状态示例
status: clusterId: Y_RJQDGKRXmNF7fEcWldJQ conditions: - lastTransitionTime: '2023-01-31T14:59:37.113630Z' status: 'True' type: Ready kafkaVersion: 3.8.0 listeners: # ... - addresses: - host: >- a8d4a6fb363bf447fb6e475fc3040176-36312313.us-west-2.elb.amazonaws.com port: 9094 bootstrapServers: >- a8d4a6fb363bf447fb6e475fc3040176-36312313.us-west-2.elb.amazonaws.com:9094 certificates: - | -----BEGIN CERTIFICATE----- -----END CERTIFICATE----- name: external3 observedGeneration: 2 operatorLastSuccessfulVersion: 2.8 # ...用于客户端连接的 DNS 地址传播到每个 loadbalancer
服务的状态。bootstrap loadbalancer 的状态示例
status: loadBalancer: ingress: - hostname: >- a8d4a6fb363bf447fb6e475fc3040176-36312313.us-west-2.elb.amazonaws.com # ...从
Kafka资源的状态中检索可用于访问 Kafka 集群的 bootstrap 地址。oc get kafka my-cluster -o=jsonpath='{.status.listeners[?(@.name=="external3")].bootstrapServers}{"\n"}' a8d4a6fb363bf447fb6e475fc3040176-36312313.us-west-2.elb.amazonaws.com:9094提取集群 CA 证书。
oc get secret my-cluster-cluster-ca-cert -o jsonpath='{.data.ca\.crt}' | base64 -d > ca.crt将您的客户端配置为连接到代理。
-
指定 Kafka 客户端中的 bootstrap 主机和端口作为连接到 Kafka 集群的 bootstrap 地址。例如,
a8d4a6fb363bf447fb6e475fc3040176-36312313.us-west-2.elb.amazonaws.com:9094。 将提取的证书添加到 Kafka 客户端的信任存储中,以配置 TLS 连接。
如果启用了客户端身份验证机制,您还需要在客户端中配置它。
-
指定 Kafka 客户端中的 bootstrap 主机和端口作为连接到 Kafka 集群的 bootstrap 地址。例如,
如果您使用自己的监听程序证书,请检查您是否需要将 CA 证书添加到客户端的信任存储配置中。如果它是一个公共(外部)CA,通常不需要添加它。