您好,登錄后才能下訂單哦!
如何使用daemonset+hostport實現(xiàn)類ingress的負載均衡服務,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
在kubernetes環(huán)境中,現(xiàn)如今我們對外提供服務我們使用較多的是ingress方案。但對于很多已經(jīng)長期使用nginx作為反向代理的用戶而言,要將復雜的配置遷移到nginx ingress上顯然非常麻煩。
所以,對于更廣大的用戶而言,將nginx的配置信息直接移植到鏡像中,然后通過良好的版本管理來進行滾動迭代發(fā)布。這樣就彌補了相比較于ingress每次更新都要手動做鏡像再進行發(fā)布的劣勢,反而體現(xiàn)了版本管理的優(yōu)勢。
同時,借鑒各廠商ingress controller的解決方案,daemonset+hostport能夠保證請求更快更直接的發(fā)送到對應的反向代理,從而提高吞吐效率。
接下來我們介紹下如何使用daemonset+hostport實現(xiàn)類ingress的負載均衡服務。
1.測試站點:
首先我們做兩個鏡像,訪問直接返回foo1,以及foo2
2.發(fā)布測試站點:
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
再進行發(fā)布 kubectl apply -f foo1-pod.yaml;kubectl apply -f foo1-svc.yaml
按照上面的文件再寫foo2-pod.yaml,foo2-svc.yaml,并進行發(fā)布。
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
創(chuàng)建鏡像并上傳到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.發(fā)布nginx
有了對應的鏡像,我們就能將nginx以daemonset的方式發(fā)布到各個節(jié)點。
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協(xié)議訪問各個節(jié)點/foo1以及/foo2來訪問后端實際運行的網(wǎng)站。
4.如何更新
首先將我們的dockerfile以及配置文件放置到gitlab上。
發(fā)布時實現(xiàn):
下載配置代碼->構(gòu)建鏡像->上傳鏡像->kubectl set image進行發(fā)布。
同時可以利用git的版本tag或者kubernetes的roll back進行版本回滾。
關(guān)于如何使用daemonset+hostport實現(xiàn)類ingress的負載均衡服務問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。