如何使用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: v1 kind: Pod metadata: name: mytest-site-foo1 labels: app: mytest-site-foo1 spec: containers: - name: mytest-site-foo1 image: 192.168.1.242:5000/mytest-site-foo1
foo1-svc.yaml
apiVersion: v1 kind: Service metadata: name: mytest-site-foo1-svc labels: app: mytest-site-foo1-svc spec: 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:latest ADD 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/v1 kind: DaemonSet metadata: name: mytest-site-nginx-ds labels: app: mytest-site-nginx-ds spec: 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的负载均衡服务问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注亿速云行业资讯频道了解更多相关知识。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。