千家信息网

如何使用daemonset+hostport实现类ingress的负载均衡服务

发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,如何使用daemonset+hostport实现类ingress的负载均衡服务,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。在kub
千家信息网最后更新 2025年12月02日如何使用daemonset+hostport实现类ingress的负载均衡服务

如何使用daemonset+hostport实现类ingress的负载均衡服务,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

在kubernetes环境中,现如今我们对外提供服务我们使用较多的是ingress方案。但对于很多已经长期使用nginx作为反向代理的用户而言,要将复杂的配置迁移到nginx ingress上显然非常麻烦。

所以,对于更广大的用户而言,将nginx的配置信息直接移植到镜像中,然后通过良好的版本管理来进行滚动迭代发布。这样就弥补了相比较于ingress每次更新都要手动做镜像再进行发布的劣势,反而体现了版本管理的优势。

同时,借鉴各厂商ingress controller的解决方案,daemonset+hostport能够保证请求更快更直接的发送到对应的反向代理,从而提高吞吐效率。

接下来我们介绍下如何使用daemonset+hostport实现类ingress的负载均衡服务。

1.测试站点:

首先我们做两个镜像,访问直接返回foo1,以及foo2

2.发布测试站点:

foo1-pod.yaml

apiVersion: v1kind: Podmetadata:  name: mytest-site-foo1  labels:    app: mytest-site-foo1spec:  containers:  - name: mytest-site-foo1    image: 192.168.1.242:5000/mytest-site-foo1

foo1-svc.yaml

apiVersion: v1kind: Servicemetadata:  name: mytest-site-foo1-svc  labels:    app: mytest-site-foo1-svcspec:  selector:    app: mytest-site-foo1  type: ClusterIP  ports:    - protocol: TCP      port: 8009      targetPort: 80

再进行发布 kubectl apply -f foo1-pod.yaml;kubectl apply -f foo1-svc.yaml

按照上面的文件再写foo2-pod.yaml,foo2-svc.yaml,并进行发布。

2.制作前端nginx镜像:

nginx的配置文件default.conf:

server {    listen       80;    server_name  localhost;    #charset koi8-r;    access_log  /var/log/nginx/host.access.log  main;    location /foo1 {        proxy_pass http://mytest-site-foo1-svc:8009/;    }    location /foo2 {        proxy_pass http://mytest-site-foo2-svc:8009/;    }    location / {        root /var/www/html;    }}

再编写dockerfile(当然如果配置文件多可以做成目录一并添加到nginx镜像中):

FROM nginx:latestADD default.conf /etc/nginx/conf.d/ENTRYPOINT nginx -c /etc/nginx/nginx.conf && tail -f /dev/null

创建镜像并上传到registry:

制作镜像:docker build -t mytest-site-nginx .

打tag:docker tag mytest-site-nginx 192.168.1.244:5000/mytest-site-nginx

上传:docker push 192.168.1.244:5000/mytest-site-nginx

3.发布nginx

有了对应的镜像,我们就能将nginx以daemonset的方式发布到各个节点。

mytest-site-nginx-ds.yaml:

apiVersion: apps/v1kind: DaemonSetmetadata:  name: mytest-site-nginx-ds  labels:    app: mytest-site-nginx-dsspec:  template:    metadata:      labels:        app: mytest-site-nginx-ds    spec:      containers:      - name: mytest-site-nginx        image: 192.168.1.242:5000/mytest-site-nginx:latest        ports:        - name: http          hostPort: 80          protocol: TCP          containerPort: 80  selector:    matchLabels:      app: mytest-site-nginx-ds

kubectl apply -f mytest-site-nginx-ds.yaml

接下来我们就能用http协议访问各个节点/foo1以及/foo2来访问后端实际运行的网站。

4.如何更新

首先将我们的dockerfile以及配置文件放置到gitlab上。

发布时实现:

下载配置代码->构建镜像->上传镜像->kubectl set image进行发布。

同时可以利用git的版本tag或者kubernetes的roll back进行版本回滚。

关于如何使用daemonset+hostport实现类ingress的负载均衡服务问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。

0