如何使用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的负载均衡服务问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注天达云行业资讯频道了解更多相关知识。