我无法从外部(从公共IP地址)访问Kafka经纪人。
我正在使用https://github.com/Yolean/kubernetes-kafka
它有一个很好的指南,但是我相信它们公开暴露端口的内置方法不起作用,因为我是在AWS的私有/公共VPC中私有运行此集群的。
我相信他们的内置外部访问方法只是在私有子网地址上公开了主机端口(对吗?)
我知道我可以为每个代理设置一个负载平衡器,并为每个负载平衡器创建一个域别名。但是那会给负载均衡器带来额外的费用。
我一直在研究入口资源,已经成功设置了一个nginx控制器,该控制器将根据主机域的url路径与不同的服务进行通信。
但是,使用nginx时,我会收到503服务,该服务暂时无法使用,并且URL弯曲(将在echoserver URL上获得成功)。所以我很快意识到http请求在这里没有意义。反正不给经纪人吗?
我现在正坚持学习nginx和成功代理请求的方式。
我应该使用特定的代理协议吗?
这也可能是不正确的server.properties配置。
使用nginx时,我会将入口资源连接到外部$$ {BROKER_ID}服务(我将第一个更改为clusterIP服务,其他则保留为NodePort)。对我来说,这是外部DNS映射到内部IP。因此,我认为Kafka server.properties上的默认侦听器设置对此可以吗?否则,侦听器是否应该成为负载均衡器的别名?我曾尝试将带有URL路径的域用作广告侦听器,但这对我来说没有任何意义,并导致崩溃循环!
对于想查看配置的任何人,我目前正在使用以下默认版本(kinda,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流创建单独的群集时,将回到这一点。