Kubernetes進(jìn)階之ingress-nginx
目錄:
一 從外部訪問應(yīng)用最佳方式
二 配置管理
三 數(shù)據(jù)卷與數(shù)據(jù)持久卷
四 再談?dòng)袪顟B(tài)應(yīng)用部署
五 K8S 安全機(jī)制
創(chuàng)新互聯(lián)是一家專注于成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)與策劃設(shè)計(jì),大柴旦網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)10余年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:大柴旦等地區(qū)。大柴旦做網(wǎng)站價(jià)格咨詢:028-86922220
說在前面的話,選擇nodeport的方式去暴露端口,那你需要得去判斷暴露的端口有沒有被占用,再創(chuàng)建新的應(yīng)用會(huì)判斷端口有沒有被分配出去
nodeport本身是基于默認(rèn)的iptables的代理模式做的網(wǎng)絡(luò)轉(zhuǎn)發(fā),也就是SANT,DANT,基于四層的,做七層是做不了的,性能差一點(diǎn),因?yàn)樗枰阑饓Φ霓D(zhuǎn)發(fā)和過濾。
一、從外部訪問應(yīng)用最佳方式
[root@k8s-master demo]# wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/mandatory.yaml
[root@k8s-master demo]# kubectl apply -f mandatory.yaml
[root@k8s-master demo]# kubectl get pod -n ingress-nginx
NAME READY STATUS RESTARTS AGE
nginx-ingress-controller-5654f58c87-r5vcq 1/1 Running 0 46s
分配給node2上面了,我們可以用netstat去查看我們監(jiān)聽的端口80/443
[root@k8s-master demo]# kubectl get pod -n ingress-nginx -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-ingress-controller-5654f58c87-r5vcq 1/1 Running 0 3m51s 192.168.30.23 k8s-node2 <none> <none>
[root@k8s-master demo]# vim ingress.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: example-ingress
spec:
rules:
- host: www.dagouzi.com
http:
paths:
- backend:
serviceName: deployment-service
servicePort: 80
[root@k8s-master demo]# kubectl create -f ingress.yaml
[root@k8s-master demo]# kubectl get ingress -o wide
NAME HOSTS ADDRESS PORTS AGE
example-ingress www.dagouzi.com 80 49m
測(cè)試訪問,這里我是寫到了我的hosts文件中,要是做域名解析的話也是解析我們ingress的IP
這種類型呢,只能給我們ingress-nginx分配到一個(gè)節(jié)點(diǎn)上,如果我們的ingress-nginx掛了就肯定訪問不到我們的應(yīng)用服務(wù)了
要是解決這個(gè)問題,我們就可以將副本進(jìn)行擴(kuò)容,使用DaemonSet的形式可以使我們的節(jié)點(diǎn)都能起一個(gè)pod,把副本刪除,因?yàn)檫@里不需要副本
,需要把之前的資源刪除才能修改
[root@k8s-master demo]# kubectl delete -f mandatory.yaml
[root@k8s-master demo]# kubectl get pod -n ingress-nginx -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-ingress-controller-4s5ck 1/1 Running 0 38s 192.168.30.22 k8s-node1 <none> <none>
nginx-ingress-controller-85rlq 1/1 Running 0 38s 192.168.30.23 k8s-node2 <none> <none>
查看我們的監(jiān)聽端口,node1/node2,上面都有,不過這樣的實(shí)例,比較適合小型的集群
一般我們還可以在這樣DaemonSet控制器前面再跑兩個(gè)基于4層的負(fù)載均衡器
User-->lb(vm-nginx/lvs/haproxy)--->node1/node2的IP,再使用算法,進(jìn)行輪詢,---->pod
[root@k8s-node1 ~]# netstat -anpt |grep 80
tcp 0 0 0.0.0.0:18080 0.0.0.0:* LISTEN 63219/nginx: master
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 63219/nginx: master
tcp 0 0 127.0.0.1:33680 127.0.0.1:18080 TIME_WAIT -
tcp 0 0 127.0.0.1:33700 127.0.0.1:18080 TIME_WAIT -
tcp 0 0 127.0.0.1:33696 127.0.0.1:18080 TIME_WAIT -
tcp 0 0 127.0.0.1:33690 127.0.0.1:18080 TIME_WAIT -
tcp 0 0 127.0.0.1:18080 127.0.0.1:33580 TIME_WAIT -
tcp 0 0 127.0.0.1:33670 127.0.0.1:18080 TIME_WAIT -
tcp 0 0 127.0.0.1:33660 127.0.0.1:18080 TIME_WAIT -
tcp 0 0 127.0.0.1:33676 127.0.0.1:18080 TIME_WAIT -
tcp 0 0 127.0.0.1:33666 127.0.0.1:18080 TIME_WAIT -
tcp 0 0 127.0.0.1:33686 127.0.0.1:18080 TIME_WAIT -
tcp 0 0 127.0.0.1:33656 127.0.0.1:18080 TIME_WAIT -
tcp6 0 0 :::18080 :::* LISTEN 63219/nginx: master
tcp6 0 0 :::80 :::* LISTEN 63219/nginx: master
[root@k8s-node1 ~]# netstat -anpt |grep 443
tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 63219/nginx: master
tcp 0 0 192.168.30.22:34798 192.168.30.21:6443 ESTABLISHED 1992/kube-proxy
tcp 0 0 192.168.30.22:44344 10.1.0.1:443 ESTABLISHED 6556/flanneld
tcp 0 0 192.168.30.22:44872 192.168.30.21:6443 ESTABLISHED 1718/kubelet
tcp 0 0 192.168.30.22:58774 10.1.0.1:443 ESTABLISHED 63193/nginx-ingress
tcp6 0 0 :::443 :::* LISTEN 63219/nginx: master
基于https形式進(jìn)行訪問
[root@k8s-master cert]# cat cfssl.sh
curl -L https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 -o /usr/local/bin/cfssl
curl -L https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 -o /usr/local/bin/cfssljson
curl -L https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64 -o /usr/local/bin/cfssl-certinfo
chmod +x /usr/local/bin/cfssl /usr/local/bin/cfssljson /usr/local/bin/cfssl-certinfo
[root@k8s-master cert]# sh cfssl.sh
[root@k8s-master cert]# ls
certs.sh cfssl.sh
[root@k8s-master cert]# chmod +x certs.sh
[root@k8s-master cert]# sh certs.sh
為我們的域名生成證書,一個(gè)key,一個(gè)pem
[root@k8s-master cert]# ls
blog.ctnrs.com.csr blog.ctnrs.com-key.pem ca-config.json ca-csr.json ca.pem cfssl.sh
blog.ctnrs.com-csr.json blog.ctnrs.com.pem ca.csr ca-key.pem certs.sh
把我們的key放入到我們的k8s中,使用ingress的時(shí)候使用這個(gè)key
[root@k8s-master cert]# kubectl create secret tls blog-ctnrs-com --cert=blog.ctnrs.com.pem --key=blog.ctnrs.com-key.pem
[root@k8s-master cert]# kubectl get secret
NAME TYPE DATA AGE
blog-ctnrs-com kubernetes.io/tls 2 3m1s
default-token-m6b7h kubernetes.io/service-account-token 3 9d
[root@k8s-master demo]# vim ingress-https.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: tls-example-ingress
spec:
tls:
- hosts:
- blog.ctnrs.com
secretName: blog-ctnrs-com
rules:
- host: blog.ctnrs.com
http:
paths:
- path: /
backend:
serviceName: deployment-service
servicePort: 80
[root@k8s-master demo]# kubectl create -f ingress-https.yaml
ingress.extensions/tls-example-ingress created
[root@k8s-master demo]# kubectl get ingress
NAME HOSTS ADDRESS PORTS AGE
example-ingress www.dagouzi.com 80 3h36m
tls-example-ingress blog.ctnrs.com 80, 443 5s
這里提示不安全,因?yàn)槲覀兪怯米院灥淖C書進(jìn)行認(rèn)證的,如果我們把買的證書替換了就可以正常去訪問了
小結(jié):
暴露外部訪問的兩種方式
User --> lb(外部的負(fù)載均衡+keepalived) -->ingress controller (node1/node2)---->pod
User --》 node(vip ingress controller+keepalived主備)-->pod
Ingress(http/https) --> service --->pod
本文名稱:Kubernetes進(jìn)階之ingress-nginx
標(biāo)題來源:http://www.rwnh.cn/article0/gcgcio.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供做網(wǎng)站、電子商務(wù)、外貿(mào)建站、網(wǎng)站設(shè)計(jì)公司、標(biāo)簽優(yōu)化、企業(yè)建站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)