KAFKA_ADVERTISED_HOST_NAME o KAFKA_ADVERTISED_LISTENERS en Kafka RC YML que finalmente establece las propiedades ADVERTISED_HOST_NAME / ADVERTISED_LISTENERS en server.properties tampoco ayuda a acceder a kafka desde fuera del clúster de kubernetes.Sugiera cómo puedo publicar/consumir desde fuera del clúster de kubernetes. ¡Muchas gracias!
Tuve el mismo problema al acceder a kafka desde fuera del clúster k8s en AWS. Me las arreglé para resolver este problema usando la función de oyentes kafka que desde la versión 0.10.2 admite múltiples interfaces.
así es como configuré el contenedor kafka.
ports: - containerPort: 9092 - containerPort: 9093 env: - name: KAFKA_ZOOKEEPER_CONNECT value: "zookeeper:2181" - name: KAFKA_LISTENER_SECURITY_PROTOCOL_MAP value: "INTERNAL_PLAINTEXT:PLAINTEXT,EXTERNAL_PLAINTEXT:PLAINTEXT" - name: KAFKA_ADVERTISED_LISTENERS value: "INTERNAL_PLAINTEXT://kafka-internal-service:9092,EXTERNAL_PLAINTEXT://123.us-east-2.elb.amazonaws.com:9093" - name: KAFKA_LISTENERS value: "INTERNAL_PLAINTEXT://0.0.0.0:9092,EXTERNAL_PLAINTEXT://0.0.0.0:9093" - name: KAFKA_INTER_BROKER_LISTENER_NAME value: "INTERNAL_PLAINTEXT"Aparte de eso configuré dos Servicios. Uno para comunicación interna (sin cabeza) y otro para comunicación externa (LoadBalancer).
Esperemos que esto ahorre tiempo a la gente.
Pude resolver mi problema haciendo los siguientes cambios:
Uso de NodeSelector en YML para hacer que kafka pod se ejecute en un nodo particular de kube cluster.
Establezca KAFKA_ADVERTISED_HOST_NAME en Kube hostName donde este Kafka POD se configuró para ejecutarse (como se configuró en el paso 1)
Exponga el servicio Kafka usando NodePort y configure el puerto POD igual que el NodePort expuesto como se muestra a continuación:
spec: ports: - name: broker-2 port: **30031** targetPort: 9092 nodePort: **30031** protocol: TCP selector: app: kafka-2 broker_id: "2" type: NodePortAhora, puede acceder a los agentes de Kafka desde fuera del clúster de kube mediante host:exposedPort
Resolví este problema usando la imagen proxy Kafka REST de Confluent.
https://hub.docker.com/r/confluentinc/cp-kafka-rest/
La documentación del proxy REST está aquí:
http://docs.confluent.io/3.1.2/kafka-rest/docs/index.html
Paso A: cree una imagen de la ventana acoplable del agente de Kafka con la última versión de Kafka
Usé una imagen de corredor de Kafka personalizada basada en la misma imagen que usó. Básicamente, solo necesita actualizar la imagen de cloudtrackinc para usar la versión 0.10.1.0 de Kafka o, de lo contrario, no funcionará. Simplemente actualice Dockerfile desde la imagen de cloudertrackinc para usar la última imagen de kafka de wurstmeister y reconstruya la imagen de docker.
- FROM wurstmeister/kafka:0.10.1.0Establecí ADVERTISED_HOST_NAME para cada corredor de Kafka en la IP de POD para que cada corredor obtenga una URL única.
- name: ADVERTISED_HOST_NAME valueFrom: fieldRef: fieldPath: status.podIPPaso B: configure el proxy cp-kafka-rest para usar su clúster de agentes de Kafka
Kafka Rest Proxy debe ejecutarse dentro del mismo clúster que su clúster de agente de Kafka.
Debe proporcionar dos variables de entorno a la imagen cp-kafka-rest como mínimo para que se ejecute. KAFKA_REST_HOST_NAME y KAFKA_REST_ZOOKEEPER_CONNECT. Puede configurar KAFKA_REST_HOST_NAME para usar la IP de POD.
- name: KAFKA_REST_HOST_NAME valueFrom: fieldRef: fieldPath: status.podIP - name: KAFKA_REST_ZOOKEEPER_CONNECT value: "zookeeper-svc-1:2181,zookeeper-svc-2:2181,zookeeper-svc-3:2181"Paso C: exponer el proxy REST de Kafka como un servicio
spec: type: NodePort or LoadBalancer ports: - name: kafka-rest-port port: 8082 protocol: TCP
Puede usar NodePort o LoadBalancer para utilizar uno o varios pods de Kafka REST Proxy.
Ventajas y desventajas de usar el proxy REST de Kafka
Ventajas:
Contras:
Entonces, si puede vivir con los problemas anteriores, pruebe Kafka Rest Proxy.