Kubernetes 在Minikube環(huán)境中使用NGINX Ingress控制器配置Ingress

2022-06-16 09:11 更新

在 Minikube 環(huán)境中使用 NGINX Ingress 控制器配置 Ingress

Ingress是一種 API 對象,其中定義了一些規(guī)則使得集群中的 服務(wù)可以從集群外訪問。 Ingress 控制器 負(fù)責(zé)滿足 Ingress 中所設(shè)置的規(guī)則。

本節(jié)為你展示如何配置一個簡單的 Ingress,根據(jù) HTTP URI 將服務(wù)請求路由到 服務(wù) ?web ?或 ?web2?。

在開始之前

你必須擁有一個 Kubernetes 的集群,同時你的 Kubernetes 集群必須帶有 kubectl 命令行工具。 建議在至少有兩個節(jié)點的集群上運行本教程,且這些節(jié)點不作為控制平面主機(jī)。 如果你還沒有集群,你可以通過 Minikube 構(gòu)建一個你自己的集群,或者你可以使用下面任意一個 Kubernetes 工具構(gòu)建:

您的 Kubernetes 服務(wù)器版本必須不低于版本 1.19。要獲知版本信息,請輸入 ?kubectl version?。如果你使用的是較早的 Kubernetes 版本,請切換到該版本的文檔。

啟用 Ingress 控制器 

  1. 為了啟用 NGINIX Ingress 控制器,可以運行下面的命令:
  2. minikube addons enable ingress
    
  3. 檢查驗證 NGINX Ingress 控制器處于運行狀態(tài):
    • minikube v1.19 或更高版本
    • kubectl get pods -n ingress-nginx
      

      說明: 最多可能需要等待一分鐘才能看到這些 Pod 運行正常。

      輸出類似于:

      NAME                                        READY   STATUS      RESTARTS    AGE
      ingress-nginx-admission-create-g9g49        0/1     Completed   0          11m
      ingress-nginx-admission-patch-rqp78         0/1     Completed   1          11m
      ingress-nginx-controller-59b45fb494-26npt   1/1     Running     0          11m
    • minikube v1.18.1 或更早版本
    • kubectl get pods -n kube-system
      

      說明: 最多可能需要等待一分鐘才能看到這些 Pod 運行正常。

      輸出類似于:

      NAME                                        READY     STATUS    RESTARTS   AGE
      default-http-backend-59868b7dd6-xb8tq       1/1       Running   0          1m
      kube-addon-manager-minikube                 1/1       Running   0          3m
      kube-dns-6dcb57bcc8-n4xd4                   3/3       Running   0          2m
      kubernetes-dashboard-5498ccf677-b8p5h       1/1       Running   0          2m
      nginx-ingress-controller-5984b97644-rnkrg   1/1       Running   0          1m
      storage-provisioner                         1/1       Running   0          2m

      請確??梢栽谳敵鲋锌吹揭粋€名稱以 ?nginx-ingress-controller-? 為前綴的 Pod。

部署一個 Hello World 應(yīng)用

  1. 使用下面的命令創(chuàng)建一個 Deployment:
  2. kubectl create deployment web --image=gcr.io/google-samples/hello-app:1.0
    

    輸出:

    deployment.apps/web created
    
  3. 將 Deployment 暴露出來:
  4. kubectl expose deployment web --type=NodePort --port=8080
    

    輸出:

    service/web exposed
    
  5. 驗證 Service 已經(jīng)創(chuàng)建,并且可能從節(jié)點端口訪問:
  6. kubectl get service web
    

    輸出類似于:

    NAME      TYPE       CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
    web       NodePort   10.104.133.249   <none>        8080:31637/TCP   12m
  7. 使用節(jié)點端口信息訪問服務(wù):
  8. minikube service web --url
    

    輸出類似于:

    http://172.17.0.15:31637
    

    說明: 如果使用的是 Katacoda 環(huán)境,在終端面板頂端,請點擊加號標(biāo)志。 然后點擊 Select port to view on Host 1。 輸入節(jié)點和端口號(這里是?31637?),之后點擊 Display Port。

    輸出類似于:

    Hello, world!
    Version: 1.0.0
    Hostname: web-55b8c6998d-8k564

    你現(xiàn)在應(yīng)該可以通過 Minikube 的 IP 地址和節(jié)點端口來訪問示例應(yīng)用了。 下一步是讓自己能夠通過 Ingress 資源來訪問應(yīng)用。

創(chuàng)建一個 Ingress

下面是一個定義 Ingress 的配置文件,負(fù)責(zé)通過 ?hello-world.info? 將請求 轉(zhuǎn)發(fā)到你的服務(wù)。

  1. 根據(jù)下面的 YAML 創(chuàng)建文件 ?example-ingress.yaml?:
  2. apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: example-ingress
      annotations:
        nginx.ingress.kubernetes.io/rewrite-target: /$1
    spec:
      rules:
        - host: hello-world.info
          http:
            paths:
              - path: /
                pathType: Prefix
                backend:
                  service:
                    name: web
                    port:
                      number: 8080
  3. 通過運行下面的命令創(chuàng)建 Ingress 對象:
  4. kubectl apply -f https://k8s.io/examples/service/networking/example-ingress.yaml
    

    輸出:

    ingress.networking.k8s.io/example-ingress created
    
  5. 驗證 IP 地址已被設(shè)置:
  6. kubectl get ingress
    

    說明: 此操作可能需要幾分鐘時間。

    接下來你將會在ADDRESS列中看到IPv4地址,例如:

    NAME              CLASS    HOSTS              ADDRESS        PORTS   AGE
    example-ingress   <none>   hello-world.info   172.17.0.15    80      38s
  7. 在 ?/etc/hosts? 文件的末尾添加以下內(nèi)容(需要管理員訪問權(quán)限):
  8. 說明: 如果你在本地運行 Minikube 環(huán)境,需要使用 ?minikube ip? 獲得外部 IP 地址。 Ingress 列表中顯示的 IP 地址會是內(nèi)部 IP 地址。

    172.17.0.15 hello-world.info
    

    添加完成后,在瀏覽器中訪問URL ?hello-world.info?,請求將被發(fā)送到 Minikube。

  9. 驗證 Ingress 控制器能夠轉(zhuǎn)發(fā)請求流量:
  10. curl hello-world.info
    

    你應(yīng)該看到類似輸出:

    Hello, world!
    Version: 1.0.0
    Hostname: web-55b8c6998d-8k564

    說明: 如果你在使用本地 Minikube 環(huán)境,你可以從瀏覽器中訪問 hello-world.info。

創(chuàng)建第二個 Deployment 

  1. 使用下面的命令創(chuàng)建第二個 Deployment:
  2. kubectl create deployment web2 --image=gcr.io/google-samples/hello-app:2.0
    

    輸出:

    deployment.apps/web2 created
    
  3. 將第二個 Deployment 暴露出來:
  4. kubectl expose deployment web2 --port=8080 --type=NodePort
    

    輸出:

    service/web2 exposed
    

編輯現(xiàn)有的 Ingress 

  1. 編輯現(xiàn)有的 ?example-ingress.yaml?,在文件最后添加以下行:
  2.            - path: /v2
                 pathType: Prefix
                 backend:
                   service:
                     name: web2
                     port:
                       number: 8080
  3. 應(yīng)用變更:
  4. kubectl apply -f example-ingress.yaml
    

    輸出:

    ingress.networking/example-ingress configured
    

測試你的 Ingress 

  1. 訪問 HelloWorld 應(yīng)用的第一個版本:
  2. curl hello-world.info
    

    輸出類似于:

    Hello, world!
    Version: 1.0.0
    Hostname: web-55b8c6998d-8k564
  3. 訪問 HelloWorld 應(yīng)用的第二個版本:
  4. curl hello-world.info/v2
    

    輸出類似于:

    Hello, world!
    Version: 2.0.0
    Hostname: web2-75cd47646f-t8cjk

    說明: 如果你在本地運行 Minikube 環(huán)境,你可以使用瀏覽器來訪問 hello-world.info 和 hello-world.info/v2。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號