kubernetes ingress太难用,还是用daemonset+hostport

in 互联网前沿
关注公众号【好便宜】( ID:haopianyi222 ),领红包啦~
阿里云,国内最大的云服务商,注册就送数千元优惠券:https://t.cn/AiQe5A0g
腾讯云,良心云,价格优惠: https://t.cn/AieHwwKl
搬瓦工,CN2 GIA 优质线路,搭梯子、海外建站推荐: https://t.cn/AieHwfX9

在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进行版本回滚。

 

 

 

 

关注公众号【好便宜】( ID:haopianyi222 ),领红包啦~
阿里云,国内最大的云服务商,注册就送数千元优惠券:https://t.cn/AiQe5A0g
腾讯云,良心云,价格优惠: https://t.cn/AieHwwKl
搬瓦工,CN2 GIA 优质线路,搭梯子、海外建站推荐: https://t.cn/AieHwfX9
扫一扫关注公众号添加购物返利助手,领红包
Comments are closed.

推荐使用阿里云服务器

超多优惠券

服务器最低一折,一年不到100!

朕已阅去看看