欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Ingress七層路由機(jī)制實(shí)現(xiàn)域名的方式訪問k8s

 更新時(shí)間:2022年03月18日 12:28:07   作者:、重明  
這篇文章主要為大家介紹了Ingress七層路由機(jī)制實(shí)現(xiàn)域名的方式訪問k8s內(nèi)部應(yīng)用,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步

Ingress概念:

通俗來講:Ingress和之前說的Service、Deployment一樣,也是一個(gè)k8s的資源類型;Ingress用于實(shí)現(xiàn)域名的方式訪問k8s的內(nèi)部應(yīng)用,Service可能更適于服務(wù)間訪問。

這東西我們使用的k8s官方維護(hù)的本版,另外nginx官方也有一個(gè)版本,怎么用看個(gè)人。

Ingress支持多種方案:包括 Nginx、Haproxy、Traefik、istio等;在實(shí)際中Ingress上面可能還有一層公司的硬件層代理。

大概的流程圖如下:

在這里插入圖片描述

創(chuàng)建一個(gè)Ingress:

這個(gè)ingress使用Hlem方式創(chuàng)建,以后會(huì)寫一篇helm的使用,現(xiàn)在不用管原理。

所需資源準(zhǔn)備:

Ingress-nginx使用的兩個(gè)容器鏡像下載地址:

鏡像地址:registry.cn-hangzhou.aliyuncs.com

鏡像:yyangs/ingress-nginx-controller;yyangs/ingress-nginx-kube-webhook-certgen

chart包:ingress-nginx-4.0.17

首先我們先創(chuàng)建一個(gè)Helm(因?yàn)橐褂胔elm創(chuàng)建)

[root@k8s-master01 ~]# wget https://get.helm.sh/helm-v3.8.0-linux-amd64.tar.gz
[root@k8s-master01 ~]# tar xf helm-v3.8.0-linux-amd64.tar.gz
[root@k8s-master01 ~]# mv linux-amd64/helm /usr/local/bin/helm

創(chuàng)建一個(gè)倉庫 ,方便安裝ingress:ingress的APP VERSION版本最好要大于0.35,查看其下可用的包

[root@k8s-master01 ~]# helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
"ingress-nginx" has been added to your repositories
[root@k8s-master01 ~]# helm repo list
NAME         	URL                                       
ingress-nginx	https://kubernetes.github.io/ingress-nginx
[root@k8s-master01 ~]# helm search repo ingress-nginx
NAME                       	CHART VERSION	APP VERSION	DESCRIPTION                                       
ingress-nginx/ingress-nginx	4.0.17       	1.1.1      	Ingress controller for Kubernetes using NGINX a...

下載ingress包,將包解壓到一個(gè)創(chuàng)建的目錄中方便修改配置

[root@k8s-master01 ~]# helm pull ingress-nginx/ingress-nginx
ingress-nginx-4.0.17.tgz
[root@k8s-master01 ~]# mkdir /temp
[root@k8s-master01 ~]# mv ingress-nginx-4.0.17.tgz /temp/
[root@k8s-master01 ~]# cd /temp/
[root@k8s-master01 temp]# tar xf ingress-nginx-4.0.17.tgz 
# 進(jìn)到ingress-nginx目錄
[root@k8s-master01 temp]# cd ingress-nginx/

修改values.yaml,基本每一行都代表一個(gè)位置

# 源位置
controller:
  name: controller
  image:
    registry: registry.cn-hangzhou.aliyuncs.com
    image: yyangs/ingress-nginx-controller
    ## digest: sha256:0bc88eb15f9e7f84e8e56c14fa5735aaa488b840983f87bd79b1054190e660de
# dns策略
  dnsPolicy: ClusterFirstWithHostNet
# 使用宿主機(jī)端口號(hào),性能好
  hostNetwork: true
# 資源類型選擇DaemonSet,會(huì)在指定節(jié)點(diǎn)上部署
  kind: DaemonSet
# 在有標(biāo)簽的node上部署
  nodeSelector:
    kubernetes.io/os: linux
    ingress: "true"
# 類型,本地環(huán)境使用
    type: ClusterIP
# 最后位置的另一處源位置
    patch:
      enabled: true
      image:
        registry: registry.cn-hangzhou.aliyuncs.com
        image: yyangs/ingress-nginx-kube-webhook-certgen
        ## digest: sha256:64d8c73dca984af206adf9d6d7e46aa550362b1d7a01f3a0a91b20cc67868660

對上面的修改做一些說明:

鏡像源:他默認(rèn)源是國外的,我們訪問不到。所以我替換成了我的阿里源,如果做這個(gè)實(shí)驗(yàn)的小伙伴可以用我的源;最后一處的源也一樣;注意把校驗(yàn)注釋

使用hostNetwork: true創(chuàng)建,配合資源類型選擇DaemonSet性能更好

dns策略:如果使用hostNetwork,策略需要改成dnsPolicy: ClusterFirstWithHostNet

執(zhí)行yaml文件創(chuàng)建

# 創(chuàng)建一個(gè)命名空間
[root@k8s-master01 ingress-nginx]# kubectl create ns ingress-nginx
namespace/ingress-nginx created
# 因?yàn)橐谥付╪ode上創(chuàng)建,所以給一臺(tái)機(jī)器創(chuàng)建一個(gè)標(biāo)簽
[root@k8s-master01 ingress-nginx]# kubectl label nodes k8s-master03 ingress=true
node/k8s-master03 labeled
# 執(zhí)行helm創(chuàng)建,那個(gè)名稱自定義,之前出了一點(diǎn)問題,所以換個(gè)名字。
[root@k8s-master01 ~]# cd /temp/ingress-nginx/
您在 /var/spool/mail/root 中有新郵件
[root@k8s-master01 ingress-nginx]# helm install nginx-ingress -n ingress-nginx .
[root@k8s-master01 temp]# kubectl get pod -n ingress-nginx -o wide 
NAME                                           READY   STATUS    RESTARTS   AGE   IP             NODE           NOMINATED NODE   READINESS GATES
nginx-ingress-ingress-nginx-controller-lrs9s   1/1     Running   0          22h   192.168.10.4   k8s-master03   <none>           <none>

可以看到這個(gè)Pod已經(jīng)起來了,并且部署在master03節(jié)點(diǎn)上,也就是有ingress=ture標(biāo)簽的節(jié)點(diǎn)上,這樣對ingress進(jìn)行擴(kuò)容或縮容的時(shí)候就會(huì)方便很多。
比如當(dāng)你想擴(kuò)容的時(shí)候只需要在想擴(kuò)容的節(jié)點(diǎn)打上對應(yīng)的標(biāo)簽,就會(huì)自動(dòng)部署一個(gè)新的Pod,就像下面這條命令。

kubectl label node k8s-master02 ingress=true

當(dāng)我不想要這個(gè)Pod的時(shí)候,縮容也會(huì)比較簡單,去掉標(biāo)簽就可以了,可以看出標(biāo)簽的強(qiáng)大之處,減號(hào)等于刪除標(biāo)簽的意思。

kubectl label node k8s-master02 ingress-

hostNetwork方式部署的ingress,會(huì)在宿主機(jī)啟動(dòng)一個(gè)進(jìn)程,我們?nèi)ゲ渴餚od的節(jié)點(diǎn)看一下,

[root@k8s-master03 ~]# ss -tpln | grep 80
LISTEN     0      16384  192.168.10.4:2380                     *:*                   users:(("etcd",pid=1703,fd=7))
LISTEN     0      16384        *:80                       *:*                   users:(("nginx",pid=106434,fd=19),("nginx",pid=106427,fd=19))
LISTEN     0      16384        *:80                       *:*                   users:(("nginx",pid=106433,fd=11),("nginx",pid=106427,fd=11))
LISTEN     0      16384     [::]:80                    [::]:*                   users:(("nginx",pid=106433,fd=12),("nginx",pid=106427,fd=12))
LISTEN     0      16384     [::]:80                    [::]:*                   users:(("nginx",pid=106434,fd=20),("nginx",pid=106427,fd=20))
[root@k8s-master03 ~]# ps aux | grep nginx
root       2622  0.0  0.1   8852  5456 ?        Ss   01:12   0:00 nginx: master process nginx -g daemon off;
101        2759  0.0  0.0   9272  2456 ?        S    01:12   0:00 nginx: worker process
101        2760  0.0  0.0   9272  2456 ?        S    01:12   0:00 nginx: worker process
root      25605  0.0  0.0 112840  2292 pts/0    S+   15:19   0:00 grep --color=auto nginx
101      106347  0.0  0.0    208     4 ?        Ss   09:08   0:00 /usr/bin/dumb-init -- /nginx-ingress-controller --publish-service=ingress-nginx/nginx-ingress-ingress-nginx-controller --election-id=ingress-controller-leader --controller-class=k8s.io/ingress-nginx --ingress-class=nginx --configmap=ingress-nginx/nginx-ingress-ingress-nginx-controller --validating-webhook=:8443 --validating-webhook-certificate=/usr/local/certificates/cert --validating-webhook-key=/usr/local/certificates/key
101      106359  0.1  1.1 743048 44956 ?        Ssl  09:08   0:25 /nginx-ingress-controller --publish-service=ingress-nginx/nginx-ingress-ingress-nginx-controller --election-id=ingress-controller-leader --controller-class=k8s.io/ingress-nginx --ingress-class=nginx --configmap=ingress-nginx/nginx-ingress-ingress-nginx-controller --validating-webhook=:8443 --validating-webhook-certificate=/usr/local/certificates/cert --validating-webhook-key=/usr/local/certificates/key
101      106427  0.0  0.9 145100 36332 ?        S    09:08   0:00 nginx: master process /usr/local/nginx/sbin/nginx -c /etc/nginx/nginx.conf
101      106433  0.0  1.0 157128 40848 ?        Sl   09:08   0:06 nginx: worker process
101      106434  0.0  1.0 157128 41000 ?        Sl   09:08   0:07 nginx: worker process
101      106435  0.0  0.7 143072 29120 ?        S    09:08   0:00 nginx: cache manager process

運(yùn)行之后,接下來嘗試簡單的使用:

傳統(tǒng)架構(gòu)中發(fā)布服務(wù),需要配置修改nginx的配置文件;在k8s中ingress與其他資源類型一樣,通過yaml去聲明一個(gè)ingress的實(shí)例。
官方網(wǎng)址:ingress-controller官方文檔詳細(xì)內(nèi)容可以看這。

使用官網(wǎng)上一個(gè)例子先認(rèn)識(shí)一下ingress

vim ingress.yaml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
  name: example
spec:
  ingressClassName: nginx
  rules:  # 可以配置多個(gè)rules
  - host: foo.bar.com # 域名匹配
    http:
      paths:  # 相當(dāng)于nginx的location配合,同一個(gè)host可以配置多個(gè)paths
      - path: /
        pathType: Prefix
        backend:
          service:
            name: nginx-svc # 代理的哪個(gè)svc
            port: 
              number: 80

這里說一下上面這個(gè)實(shí)例的一些說明:

從rules開始向下是定義前后端連接的規(guī)則:

host:代表基于域名訪問,客戶端通過這個(gè)域名訪問后端資源

http.paths:相當(dāng)于nginx的location中匹配規(guī)則

pathType:Prefix:路徑類型,路徑由“/”符號(hào)分隔為一個(gè)個(gè)元素,匹配規(guī)則為逐個(gè)元素進(jìn)行前綴匹配,默認(rèn)ImplementationSpecific,還有一種是Exact。

backend:定義后端

service:下定義后端的地址,包括代理的svc和端口號(hào)

這里我遇到一個(gè)問題:

[root@k8s-master01 ~]# kubectl create -f ingress.yaml 
Error from server (InternalError): error when creating "ingress.yaml": Internal error occurred: failed calling webhook "validate.nginx.ingress.kubernetes.io": failed to call webhook: Post "https://ingress-nginx-controller-admission.ingress-nginx.svc:443/networking/v1/ingresses?timeout=10s": service "ingress-nginx-controller-admission" not found

創(chuàng)建的時(shí)候報(bào)錯(cuò):

yaml": Internal error occurred: failed calling webhook "validate.nginx.ingress.kubernetes. io"

我查看了下網(wǎng)上說應(yīng)該是刪除之前創(chuàng)建的資源時(shí)沒刪干凈。

[root@k8s-master01 ~]# kubectl get validatingwebhookconfigurations.admissionregistration.k8s.io 
NAME                                    WEBHOOKS   AGE
ingress-nginx-admission                 1          3d

然后查看下果然有個(gè)ingress-nginx-admission,刪除后在創(chuàng)建就成功了

[root@k8s-master01 ~]# kubectl delete -A validatingwebhookconfigurations.admissionregistration.k8s.io ingress-nginx-admission 
validatingwebhookconfiguration.admissionregistration.k8s.io "ingress-nginx-admission" deleted

執(zhí)行ingress.yaml文件,這次就創(chuàng)建成功了。

[root@k8s-master01 ~]# kubectl create -f ingress.yaml 
ingress.networking.k8s.io/exmple created
[root@k8s-master01 ~]# kubectl get ingress
NAME     CLASS    HOSTS         ADDRESS   PORTS   AGE
exmple   <none>   foo.bar.com             80      10m

ingress也是可以配置多域名的

就是增加一個(gè)host實(shí)例。

# 第一個(gè)域名
  - host: foo.bar.com 
    http:
      paths:  
      - path: /
        pathType: Prefix
        backend:
          service:
            name: nginx-svc
            port: 
              number: 80
# 第二個(gè)域名
  - host: foo2.bar.com 
    http:
      paths:  
      - path: /test
        pathType: Prefix
        backend:
          service:
            name: nginx-svc-2
            port: 
              number: 80

然后更新yaml文件就好了

[root@k8s-master01 ~]# kubectl replace -f ingress.yaml

以上就是Ingress七層路由機(jī)制實(shí)現(xiàn)域名的方式訪問k8s的詳細(xì)內(nèi)容,更多關(guān)于Ingress七層路由機(jī)制域名訪問k8s的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 服務(wù)器間如何實(shí)現(xiàn)文件共享

    服務(wù)器間如何實(shí)現(xiàn)文件共享

    這篇文章主要介紹了服務(wù)器間如何實(shí)現(xiàn)文件共享,包括服務(wù)端和客戶端兩部分,通過詳細(xì)步驟給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-05-05
  • windows 權(quán)限之拒絕運(yùn)行應(yīng)用程序

    windows 權(quán)限之拒絕運(yùn)行應(yīng)用程序

    windows 權(quán)限之拒絕運(yùn)行應(yīng)用程序的解決方法。
    2009-06-06
  • 解析服務(wù)器常見錯(cuò)誤代碼500、501、502、503、504、505

    解析服務(wù)器常見錯(cuò)誤代碼500、501、502、503、504、505

    這篇文章主要介紹了服務(wù)器常見錯(cuò)誤代碼500、501、502、503、504、505的相關(guān)知識(shí),需要的的朋友參考下吧
    2017-05-05
  • web壓力測試工具_(dá)動(dòng)力節(jié)點(diǎn)Java 學(xué)院整理

    web壓力測試工具_(dá)動(dòng)力節(jié)點(diǎn)Java 學(xué)院整理

    本文給大家分享幾個(gè)web 壓力測試工具,非常不錯(cuò),具有參考借鑒價(jià)值,需要的的朋友參考下吧
    2017-08-08
  • 最新評論