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 主机。
例如:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- bootstrap 服务和 Kafka 代理的 Ingress 主机。
创建或更新资源。
oc apply -f KAFKA-CONFIG-FILE
oc apply -f KAFKA-CONFIG-FILE
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为每个 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
oc get secret KAFKA-CLUSTER-NAME-cluster-ca-cert -o jsonpath='{.data.ca\.crt}' | base64 -d > ca.crt
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用 Kafka 客户端中提取的证书来配置 TLS 连接。如果启用了任何身份验证,您还需要配置 SASL 或 TLS 身份验证。