中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

Kubernetes進(jìn)階之ingress-nginx

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)用最佳方式

  1. Pod與Ingress的關(guān)系
    ? 通過Service相關(guān)聯(lián)
    ? 通過Ingress Controller實(shí)現(xiàn)Pod的負(fù)載均衡
    • 支持TCP/UDP 4層和HTTP 7層
      Kubernetes進(jìn)階之ingress-nginx
  2. Ingress Controller
    controller類似裝的k8s組件,時(shí)常的要去api去交互,時(shí)常去獲取api的相關(guān)的信息,刷新自己的規(guī)則,類似與其他控制器
    ingress,k8s設(shè)計(jì)了一個(gè)比較全局性的負(fù)載均衡器,準(zhǔn)確的來說Ingress它是k8s中的一個(gè)規(guī)則,實(shí)現(xiàn)這個(gè)規(guī)則就是使用的這個(gè)控制器,一般稱為ingress控制器
    ingress控制器主要做的工作就是,它訪問到這個(gè)控制器,它幫你轉(zhuǎn)發(fā)的具體pod,也就是集群池,關(guān)聯(lián)的哪些應(yīng)用,哪些pod的IP,會(huì)幫你關(guān)聯(lián)出來,暴露的端口80,443
    Kubernetes進(jìn)階之ingress-nginx
    1.部署Ingress Controlle
    部署文檔:https://github.com/kubernetes/ingress-nginx/blob/master/docs/deploy/index.md
  3. 創(chuàng)建Ingress規(guī)則,為你的應(yīng)用暴露一個(gè)端口,暴露一個(gè)域名,讓用戶去訪問這個(gè)ingress controller控制器就可以了
    3.控制器選擇類型
    https://kubernetes.io/docs/concepts/services-networking/ingress-controllers/
    注意事項(xiàng):
    ? 鏡像地址修改成國(guó)內(nèi)的: zhaocheng172/nginx-ingress-controller:0.20.0
    ? 使用宿主機(jī)網(wǎng)絡(luò):hostNetwork: true
    [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
    Kubernetes進(jìn)階之ingress-nginx
    這種類型呢,只能給我們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

Kubernetes進(jìn)階之ingress-nginx
這里提示不安全,因?yàn)槲覀兪怯米院灥淖C書進(jìn)行認(rèn)證的,如果我們把買的證書替換了就可以正常去訪問了
Kubernetes進(jìn)階之ingress-nginx
小結(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)

綿陽(yáng)服務(wù)器托管
明星| 云龙县| 无为县| 高要市| 东兰县| 延寿县| 宜丰县| 宜兰市| 万源市| 垦利县| 靖安县| 大足县| 盐山县| 靖西县| 阿鲁科尔沁旗| 甘洛县| 库尔勒市| 大新县| 盘锦市| 鄂托克旗| 金华市| 仁寿县| 哈密市| 京山县| 察哈| 江都市| 亚东县| 集贤县| 宁城县| 炉霍县| 长乐市| 龙川县| 乐都县| 恭城| 宽城| 汤阴县| 涿鹿县| 贵港市| 武陟县| 松潘县| 西安市|