kubernetes statefulset kafka 部署后, 外部访问超时问题解决
k8s 内部的kafka要映射到外网,直接把 kafka 通过 expose 把pod 映射成服务,使用nodeport 连接,出现超时问题,

解决思路:
1. 查看zk中,kafka的注册信息,PLAINTEXT://kafka-0.kafka-hs.sy-platform-demo.svc.cluster.local.:9093", 而应用代码中,必须使用这个域名+端口进行连接,由于k8s使用30000-32000,端口对外映射,所以9093端口必须修改


2. kafka.yaml文件修改端口
apiVersion: v1
kind: Service
metadata:
name: kafka-hs
namespace: sy-platform-demo
labels:
app: kafka
spec:
ports:
- port:
name: server
clusterIP: None
selector:
app: kafka ---
apiVersion: v1
kind: Service
metadata:
namespace: sy-platform-demo
name: kafka-cs
labels:
app: kafka
spec:
ports:
- port:
name: client
selector:
app: kafka ---
apiVersion: policy/v1beta1
kind: PodDisruptionBudget
metadata:
namespace: sy-platform-demo
name: kafka-pdb
spec:
selector:
matchLabels:
app: kafka
maxUnavailable:
---
apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
namespace: sy-platform-demo
name: kafka
spec:
serviceName: kafka-hs
replicas:
podManagementPolicy: Parallel
updateStrategy:
type: RollingUpdate
template:
metadata:
labels:
app: kafka
spec:
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: "app"
operator: In
values:
- kafka
topologyKey: "kubernetes.io/hostname"
podAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight:
podAffinityTerm:
labelSelector:
matchExpressions:
- key: "app"
operator: In
values:
- zk
topologyKey: "kubernetes.io/hostname"
terminationGracePeriodSeconds:
containers:
- name: k8skafka
imagePullPolicy: Always
image: 192.168.200.10/fengjian/kafka_2.-0.10.1.1:
resources:
requests:
memory: "3Gi"
cpu:
ports:
- containerPort:
name: server
command:
- sh
- -c
- "exec /data/kafka/bin/kafka-server-start.sh /data/kafka/config/server.properties --override broker.id=${HOSTNAME##*-} \
--override listeners=PLAINTEXT://:31902 \
--override zookeeper.connect=zk-cs.sy-platform-demo.svc.cluster.local: \
--override request.timeout.ms= \
--override session.timeout.ms= \
--override heartbeat.interval.ms="
env:
- name: KAFKA_HEAP_OPTS
value : "-Xmx1G -Xms1G"
- name: KAFKA_OPTS
value: "-Dlogging.level=INFO"
volumeMounts:
- name: datadir
mountPath: /export
readinessProbe:
tcpSocket:
port:
initialDelaySeconds:
periodSeconds:
volumeClaimTemplates:
- metadata:
name: datadir
annotations:
volume.beta.kubernetes.io/storage-class: "ceph-rbd-provisioner"
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 30Gi
3. 对pod打标签,然后映射成服务
kubectl label pod kafka- kafkaInst= -n sy-platform-demo
kubectl expose pod kafka- --port= --target-port= --name=kafka- --selector=kafkaInst= --type=NodePort -n sy-platform-demo
4. 修改kafka-0 的nodeport 端口号
kubectl edit service kafka- -n sy-platform-demo

5. 外部测试机修改host,写入对应关系
[root@node2 logs]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
:: localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.20.171 master1 etcd1
192.168.20.172 master2 etcd2
192.168.20.173 master3 etcd3
192.168.20.174 node1
192.168.20.175 node2
192.168.20.176 node3
192.168.20.177 node4
192.168.20.178 node5
192.168.20.174 kafka-.kafka-hs.senyint.svc.cluster.local.
192.168.20.174 zk-cs
6. 修改代码文件,写入域名
abcd.queue.internal.notify.kafka.producer.bootstrap.servers=kafka-.kafka-hs.senyint.svc.cluster.local.:
abcd..queue.zkAddress=zk-cs:
7. 遗留问题
目前只映射了一个kafka pod, 如果全部映射,那么需要修改端口后,保持kafka-0 ---kafka-2 的端口号不同
kubernetes statefulset kafka 部署后, 外部访问超时问题解决的更多相关文章
- tomcat配置根目录访问后,部署后第一次访问会出现tomcat的默认界面而非项目首页
tomcat配置根目录访问后,部署后第一次访问会出现tomcat的默认界面而非项目首页,而重启后会正常,这个原因是因为在配置文件中有如下配置,造成项目加载两次 <Host name=" ...
- ASP.NET 网站从Sever2003迁移到Sever 2008部署后不能访问
最近公司运维迁移网站遇到部署后始终不能访问,一直提示无法访问请求的页面,但是请求页面正常,程序没问题,在本地电脑运行正常,运维找了好久没找到原因. 后来问我,我也找了好久,最后终于解决了. 解决方法是 ...
- Kafka 部署完在服务器端可以访问,而在外部其它电脑访问不了
Kafka 部署完在服务器端可以访问,而在外部其它电脑访问不了 原因:config/server.properties的listeners和advertised.listeners 不配置的话默认的l ...
- 简单操作:10分钟实现在kubernetes(k8s)里面部署服务器集群并访问项目(docker三)
前言 经过docker安装.k8s开启并登录,我们终于到 "部署k8s服务器集群并访问项目" 这一步了,实现的过程中有太多坑,好在都填平了,普天同庆. 在进行当前课题之前,我们需要 ...
- 【转载】浅析从外部访问 Kubernetes 集群中应用的几种方式
一般情况下,Kubernetes 的 Cluster Network 是属于私有网络,只能在 Cluster Network 内部才能访问部署的应用.那么如何才能将 Kubernetes 集群中的应用 ...
- 生产环境Docker部署ELK跨区访问kafka不通问题的解决
由于分布式系统的日志集中采集的需求非常强烈,我们组通过调研和实践搭建了一套基于Docker的日志收集系统Amethyst. 我们首先在测试环境搭建了一套基于Docker swarm集群的ELK分布式环 ...
- spring boot 打包war后 部署到外部 tomcat 的具体正确操作【包括修改端口 与 去除请求路径的工程名】
1.前言 工程做好了,总不能放在idea运行吧?不然怎么把项目放到云服务器呢?[这一篇随笔不讲解发布的云服务器的操作,在其他随笔有详细记载.] 解决的方案是把springboot 工程 打包成war文 ...
- Kubernetes的三种外部访问方式:NodePort、LoadBalancer和Ingress(转发)
原文 http://cloud.51cto.com/art/201804/570386.htm Kubernetes的三种外部访问方式:NodePort.LoadBalancer和Ingress 最近 ...
- centos7虚拟机开启端口后 外部不能访问的问题
转载 https://blog.csdn.net/u012045045/article/details/104219823 虚拟机新开了5005端口,系统内部是显示开了的(wget 192.168.4 ...
随机推荐
- windows BLE编程 net winform 连接蓝牙4.0
winform 程序调用Windows.Devices.Bluetoot API 实现windows下BLE蓝牙设备自动连接,收发数据功能.不需要使用win10的UWP开发. 先贴图,回头来完善代码 ...
- T-SQL:基础练习(杂)
1.返回 每月最后一天订单 SELECT orderid, orderdate, custid, empid FROM Sales.Orders WHERE orderdate = EOMONTH(o ...
- c# txt代码转换成HTML格式
/// <summary> /// 字符串字符处理 /// </summary> /// <param name="chr">等待处理的字符串& ...
- jquery 获得下拉框的值《转》
获取Select : 获取select 选中的 text : $("#ddlRegType").find("option:selected").text(); ...
- Java学习笔记之——循环语句
一.for循环 语法: for(变量初始化:条件判断:更新循环变量){ 循环体: } 案例: 二.while循环 语法: while(条件){ 循环体: } 如果条件为true,执行循环体,false ...
- 【协议】4、http状态码
10.4 客户错误 4xx 状态代码4xx类是专门使用在客户看上去错误的情形下的.除非当应答一个HEAD请求时,服务器因该有一个包括错误情形的解释的实体,以及它是否一个临时或者终了的条件.这些状态编码 ...
- Matlab arenstorf problem
% right-hand side of arenstorf problem function yDot = arenstorf(t,y) global mu muHat % unpack y u1 ...
- Linux常用基本命令:grep-从文件或者管道中筛选匹配的行
grep命令 作用:从文本文件或管道数据流中筛选匹配的行及数据,配合正则表达式一起使用,功能更加强大. 格式: grep [options] [pattern] [file] 1,匹配包含" ...
- pygame中模块说明
参考博客:https://blog.csdn.net/qq_27717921/article/details/53231762 pygame模块概览 1.display模块 功能:生成windows窗 ...
- CSS效果:CSS select样式优化 含jquery代码
CSS 下拉选择菜单基本的CSS样式不怎么好看,通过一些简单的样式优化,可以得到如下图这样的: html结构如下: <div class="sel_wrap"> < ...