3.3. 使用 ingress 访问 Kafka
此流程演示了如何使用 Nginx Ingress 从 OpenShift 外部的外部客户端访问 AMQ Streams Kafka 集群。
要连接到代理,需要 Ingress bootstrap 地址的主机名(公告地址 ),以及用于身份验证的证书。
对于使用 Ingress 访问,端口始终为 443。
TLS passthrough
Kafka 通过 TCP 使用二进制协议,但 Kubernetes 的 NGINX Ingress Controller 旨在使用 HTTP 协议。为了能够通过 Ingress 传递 Kafka 连接,AMQ Streams 使用 Kubernetes NGINX Ingress Controller 的 TLS 直通功能。确保在 NGINX Ingress Controller 中为 Kubernetes 部署启用了 TLS passthrough。
由于它使用 TLS passthrough 功能,所以在使用 Ingress
公开 Kafka 时无法禁用 TLS 加密。
有关启用 TLS 直通的更多信息,请参阅 TLS 直通文档。
先决条件
- OpenShift 集群
- 为启用了 TLS passthrough 的 Kubernetes 部署 NGINX Ingress Controller
- 一个正在运行的 Cluster Operator
流程
配置
Kafka
资源,并将外部监听程序设置为ingress
类型。指定 bootstrap 服务和 Kafka 代理的 Ingress 主机。
例如:
apiVersion: kafka.strimzi.io/v1beta2 kind: Kafka spec: kafka: # ... listeners: - name: external port: 9094 type: ingress tls: true authentication: type: tls configuration: 1 bootstrap: host: bootstrap.myingress.com brokers: - broker: 0 host: broker-0.myingress.com - broker: 1 host: broker-1.myingress.com - broker: 2 host: broker-2.myingress.com # ... zookeeper: # ...
- 1
- bootstrap 服务和 Kafka 代理的 Ingress 主机。
创建或更新资源。
oc apply -f KAFKA-CONFIG-FILE
为每个 Kafka 代理创建
ClusterIP
类型服务,以及一个额外的 bootstrap 服务。这些服务供 Ingress 控制器用于将流量路由到 Kafka 代理。还会为每个服务创建一个Ingress
资源,以使用 Ingress 控制器公开它们。Ingress 主机传播到每个服务的状态
。也使用与
Kafka
资源相同的名称来创建用于验证 kafka 代理身份的集群 CA 证书。使用 Kafka 客户端中的
配置
和端口 443(BOOTSTRAP-HOST:443)中指定的 bootstrap 主机 地址,作为 bootstrap 地址 连接到 Kafka 集群。提取代理认证机构的公共证书。
oc get secret KAFKA-CLUSTER-NAME-cluster-ca-cert -o jsonpath='{.data.ca\.crt}' | base64 -d > ca.crt
使用 Kafka 客户端中提取的证书来配置 TLS 连接。如果启用了任何身份验证,您还需要配置 SASL 或 TLS 身份验证。