K8S多节点情况下使用nginx负载ingress或者是istio域名服务的处理
2023-09-27 14:24:14 时间
K8S多节点情况下使用nginx负载ingress或者是istio域名服务的处理
背景
- 公司内部有一个自建的K8S测试集群.同事这边使用istio或者是ingress发布了一个域名服务.
- 公司这边的DNS管理比较严格,比较难以添加DNS记录,所以处理起来需要手动处理.
- 为了进行性能压测,希望域名能够平均的负载到K8S的3个worker节点中.
- 并且能够尽可能的减少客户端hosts文件的修改.
处理方式
- 最简单的处理是在nginx所在服务器,将istio后者是ingress 对应的worker节点添加到hosts中
vi /etc/hosts
添加 ip 虚拟域名
- 但是做了一个实现,发现/etc/hosts 并不能很好的实现 域名IP地址的轮询.
- 感觉还是需要用bind 添加一个域名关系来处理.
- 为了简单先用 hosts .至少 hsots 能够实现一定意义的高可用
原理说明
- 备注: 此处是根据自己的理解
ingress 在使用时 本质是利用 nginx的 virtual hosts的路由分发机制.
根据http 过来的是 server_name 进行区分.
如果是 serverA 那么走A服务, 如果是serverB 那么走B服务
其实就跟VPS实现同一个ip地址可以挂载多个域名是完全一样的技术路线.
nginx的处理
- 注意安装的时候需要 添加 with-stream 的方式来处理
- 对不修改 hosts 文件
vi /etc/hosts
添加
10.24.19.204 b2b.xxxx.com
10.24.19.205 b2b.xxxx.com
10.24.19.207 b2b.xxxx.com
nginx的模板为
worker_processes auto;
events {
multi_accept on;
use epoll;
worker_connections 1024;
}
stream {
upstream node_ingress {
least_conn;
server b2b.xxxx.com:8080 ;
}
server {
listen 0.0.0.0:80;
proxy_pass node_ingress;
proxy_timeout 10m;
proxy_connect_timeout 1s;
}
}
修改客户端机器的hosts
- 注意这里不能与k8s节点一致
c:\windows\system32\drivers\etc\hosts
添加内容
10.24.19.208 b2b.xxxx.com
- 浏览器打开即可
备注说明
- 注意理论上可以使用在正向代理来实现
- 注意可以使用bind9 搭建一个自建的dns实现路由的负载均衡.
- 注意nginx其实需要注意的地方挺多的. 需要逐步学习
相关文章
- K8S学习圣经:大白话说K8S底层原理,14W字实现K8S自由
- K8S圣经12:SpringCloud+Jenkins+ K8s Ingress 自动化灰度发布
- K8S面试题(史上最全 + 持续更新)
- k8s将dockershim移除之后,如何继续使用docker?
- 如何在k8s集群节点故障时(not ready,unreachable),定义pod的驱逐行为?
- 使用Kubeadm创建k8s集群之节点部署(三十一)
- 下载k8s.gcr.io仓库的镜像的两个方式
- 我非要把这个bug优雅的解决掉 | k8s记录events报错:Could not construct referenc
- 通过 kubectl 查看 K8s 内节点、Pod 资源使用情况
- 「K8s入门指北」Docker不香吗?为什么还需要K8s?
- 从零开始入门 K8s| 阿里技术专家详解 K8s 核心概念
- [云原生k8s] k8s的CA证书创建和使用
- [云原生之k8s] Kubernetes原理
- Jenkins指定tag发布到k8s环境
- K8s 节点断开连接后,本在运行的 Pod 会如何?
- 公网环境搭建 k8s 集群的详细步骤
- K8S操作
- k8s pod 内存 所以判断container_memory_working_set_bytes会比container_memory_usage_bytes更为准确
- k8s 传参给docker env command、args和dockerfile中的entrypoint、cmd之间的关系
- k8s部署zookeeper集群(3节点,1个leader,2个follower)