【问题标题】:Kafka behind Traefik on KubernetesKubernetes 上 Traefik 背后的 Kafka
【发布时间】:2019-03-18 18:44:32
【问题描述】:

我正在尝试在 Traefik 后面配置一个 Kafka 集群,但我的生产者和客户端(在 kubernetes 之外)没有连接到引导服务器。他们一直在说:

"在给定的 url 中没有可解析的 boostrap 服务器"

其实这里是 Traefik 入口:

{
    "apiVersion": "extensions/v1beta1",
    "kind": "Ingress",
    "metadata": {
        "name": "nppl-ingress",
        "annotations": {
            "kubernetes.io/ingress.class": "traefik",
            "traefik.frontend.rule.type": "PathPrefixStrip"
        }
    },
    "spec": {
        "rules": [
            {
                "host": "" ,
                "http": {
                    "paths": [
                        {
                            "path": "/zuul-gateway",
                            "backend": {
                                "serviceName": "zuul-gateway",
                                "servicePort": "zuul-port"
                            }
                        },                      
                        {
                            "path": "/kafka",
                            "backend": {
                                "serviceName": "kafka-broker",
                                "servicePort": "kafka-port"
                            }

[..]
    }

我给 kafka 消费者/生产者的是 Traefik 的公共 IP。 流程如下:[Kafka 生产者/消费者] -> Traefik(暴露为负载均衡器)-> [Kafka-Cluster]

有什么解决办法吗?否则,我想在 Traefik 和 kafka 代理之间添加一个 kafka-rest 代理 (https://docs.confluent.io/current/kafka-rest/docs/index.html),但我认为这不是理想的解决方案。

【问题讨论】:

  • 我对 Kafka 和 traefik 都不熟悉,但我想你想念负载均衡器。您将 traefik 用作将您的服务映射到 API http 请求的入口对象,但您还需要定义一个 LB 将流量转发到您的入口。这在 KVM 或裸机 k8s 集群中很常见。否则我的下一个猜测是 servicePort 应该是数字而不是字符串。
  • 跟我做的不一样吗?我将 Traefik 暴露为负载均衡器,因此它就像集群的入口点。
  • 我相信您正在公开一个 http 协议端点,但 kafka 没有使用 http,这可能是失败的原因。

标签: kubernetes apache-kafka load-balancing traefik


【解决方案1】:

我做到了。可以参考一下,在kubernetes中,部署kafka.yaml

   env:
    - name: KAFKA_BROKER_ID
      value: "1"
    - name: KAFKA_CREATE_TOPICS
      value: "test:1:1"
    - name: KAFKA_ZOOKEEPER_CONNECT
      value: "zookeeper:2181"
    - name: KAFKA_ADVERTISED_LISTENERS
      value: "INSIDE://:9092,OUTSIDE://kafka-com:30322"
    - name: KAFKA_LISTENERS
      value: "INSIDE://:9092,OUTSIDE://:30322"
    - name: KAFKA_LISTENER_SECURITY_PROTOCOL_MAP
      value: "INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT"
    - name: KAFKA_INTER_BROKER_LISTENER_NAME
      value: "INSIDE" 

kafka服务,外部服务调用地址,或者traefik代理地址

---
kind: Service
apiVersion: v1
metadata:
  name: kafka-com
  namespace: dev
  labels:
    k8s-app: kafka
spec:
  selector:
    k8s-app: kafka
  ports:
  - port: 9092
    name: innerport
    targetPort: 9092
    protocol: TCP
  - port: 30322
    name: outport 
    targetPort: 30322
    protocol: TCP
    nodePort: 30322
  type: NodePort

保证Kafka外部端口和nodePort端口一致,其他服务调用kafka-com:30322,我的博客写这个config_kafka_in_kubernetes,希望对你有帮助!

【讨论】:

    猜你喜欢
    • 2021-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-28
    • 1970-01-01
    相关资源
    最近更新 更多