如何在aws私有/公共vpc上对外公开kubernetes中的kafka brokers端口

vsdwdz23  于 2021-06-07  发布在  Kafka
关注(0)|答案(0)|浏览(206)

我无法从外部访问Kafka代理(从公共ip地址)。
我正在使用https://github.com/yolean/kubernetes-kafka
它有一个非常好的指南,但是我相信他们公开端口的内置方法不起作用,因为我在aws上的私有/公共vpc中私自运行这个集群。
我相信他们的内置外部访问方法只是在私有子网地址上公开主机端口(这是正确的吗?)
我知道我可以为每个代理设置一个负载平衡器,并为每个负载平衡器别名一个域。但是我在负载均衡器上要付出额外的成本。
我一直在研究入口资源,已经成功地设置了nginx控制器,它可以根据到主机域的url路径与不同的服务进行通信。
然而,使用nginx,我将收到一个503服务,该服务暂时不可用,并对url进行 curl (将在echoserverurl上获得成功)。所以我很快意识到http请求在这里没有意义。不是给经纪人吗?
我现在一直在学习nginx和一种成功的代理请求的方法。
我是否应该使用特定的代理协议?
这也可能是错误的server.properties配置。
当使用nginx时,我将入口资源连接到外部-${broker\u id}服务(我将第一个更改为clusterip服务,其他则保留为nodeport)。对我来说,这是外部dnsMap到内部IP。因此,我认为kafka server.properties上的默认侦听器设置可以用于此?。否则,侦听器是否应该成为负载平衡器的别名域?我曾尝试将url路径作为播发侦听器的域,但这对我没有任何意义,并导致崩溃循环!
对于任何想要查看配置的人,我目前使用的是默认版本(有点像,5个pzoos,没有ezoos[它们总是被固定为挂起]):

https://github.com/Yolean/kubernetes-kafka

这可以在现有集群上快速设置(对于aws):

git clone https://github.com/Yolean/kubernetes-kafka
cd kubernetes-kafka
(AWS) rm configure/!(aws*)
kubectl apply -f configure
kubectl apply -f 00-namespace*
kubectl apply -f rbac*
kubectl apply -f zookeeper
kubectl apply -f kafka
kubectl config set-context $(kubectl config current-context) --namespace=kafka

我正在运行这个版本的nginx

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/mandatory.yaml
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/provider/aws/service-l4.yaml
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/provider/aws/patch-configmap-l4.yaml

echoserver来自:

https://github.com/kubernetes/kops/tree/master/addons/ingress-nginx

使用的特定行:

kubectl run echoheaders --image=k8s.gcr.io/echoserver:1.4 --replicas=1 --port=8080
kubectl expose deployment echoheaders --port=80 --target-port=8080 --name=echoheaders-x
kubectl expose deployment echoheaders --port=80 --target-port=8080 --name=echoheaders-y

这是我的nginx入口资源:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: echomap
  # annotations:
  # nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - host: brokers.my-domain.com
    http:
      paths:
      - path: /broker0
        backend:
          serviceName: outside-0
          servicePort: 31100
      - path: /broker1
        backend:
          serviceName: outside-1
          servicePort: 31101
      - path: /broker2
        backend:
          serviceName: outside-2
          servicePort: 31102
      - path: /bar
        backend:
          serviceName: echoheaders-y
          servicePort: 80
      - path: /foo
        backend:
          serviceName: echoheaders-x
          servicePort: 80

编辑:我专注于通过负载平衡器获得外部访问,并取得了一定的成功。问题可以在这里找到https://serverfault.com/questions/949367/can-connect-to-kafka-but-cannot-consume
很确定nginx不会作为入口吗?我不明白http请求是如何变成tcp请求的。
现在开始内部Kafka流应用程序。当Kafka流有一个单独的集群变得更加必要时,我们将回到这个问题。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题