<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                [TOC] **背景:** 由于域名和公網費用昂貴。通常是只有一個域名,但是有多個應用需要上線。通常都會域名+應用名稱(`www.ecloud.com/app`)。原本應用已經開發好的了,訪問是在 `/` 。那就需要改寫上下文來實現。 # 原應用演示 ```shell $ kubectl get svc app demo NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE app ClusterIP 10.183.0.36 <none> 8001/TCP 6m13s demo ClusterIP 10.183.0.37 <none> 8002/TCP 2m47s $ curl 10.183.0.36:8001 app $ curl 10.183.0.37:8002/test/demo/ demo ``` > 現在有兩個應用分別是 `app` 、`demo`。分別的訪問路徑為:`/`、`/test/demo`。現在只有一個域名是 `www.ecloud.com` 且需要把兩個網頁都放在同一個域名訪問。 # 添加上下文路徑 現在的目標是把 `app` 應用,可以通過 `www.ecloud.com/app/` 來展示 ## 創建ingress ```yaml apiVersion: extensions/v1beta1 kind: Ingress metadata: name: app namespace: default annotations: nginx.ingress.kubernetes.io/rewrite-target: /$2 # 真實到服務的上下文 spec: ingressClassName: nginx rules: - host: www.ecloud.com http: paths: - path: /app(/|)(.*) # 瀏覽器訪問上下文 backend: serviceName: app servicePort: 8001 ``` ## 驗證 ```shell $ curl www.ecloud.com/app/ app $ curl www.ecloud.com/app/index.html app ``` # 減少上下文路徑 現在的目標是把 `demo` 應用,可以通過 `www.ecloud.com/demo/` 來展示 ## 創建ingress ```yaml apiVersion: extensions/v1beta1 kind: Ingress metadata: name: demo namespace: default annotations: nginx.ingress.kubernetes.io/rewrite-target: /test/demo/$2 # 真實到服務的上下文 spec: ingressClassName: nginx rules: - host: www.ecloud.com http: paths: - path: /demo(/|)(.*) # 瀏覽器訪問上下文 backend: serviceName: demo servicePort: 8002 ``` ## 驗證 ```shell $ curl www.ecloud.com/demo demo $ curl www.ecloud.com/demo/ demo $ curl www.ecloud.com/demo/index.html demo ``` # 修改主域名跳轉 應該給應用設置一個 `app-root` 的注解,這樣當我們訪問主域名的時候會自動跳轉到我們指定的 `app-root` 目錄下面。如下所示: ```yaml apiVersion: extensions/v1beta1 kind: Ingress metadata: name: demo namespace: default annotations: nginx.ingress.kubernetes.io/rewrite-target: /test/demo/$2 # 真實到服務的上下文 nginx.ingress.kubernetes.io/app-root: /demo/ # 這里寫瀏覽器訪問的路徑 spec: ingressClassName: nginx rules: - host: www.ecloud.com http: paths: - path: /demo(/|)(.*) # 瀏覽器訪問上下文 backend: serviceName: demo servicePort: 8002 ``` **驗證** ```shell $ curl www.ecloud.com <html> <head><title>302 Found</title></head> <body> <center><h1>302 Found</h1></center> <hr><center>nginx</center> </body> </html> # nginx-ingress-controller 的日志 192.168.31.103 - - [16/Sep/2021:08:22:39 +0000] "GET / HTTP/1.1" 302 138 "-" "curl/7.29.0" 78 0.000 [-] [] - - - - 5ba35f028edbd48ff316bd544ae60746 $ curl www.ecloud.com -L demo # nginx-ingress-controller 的日志 192.168.31.103 - - [16/Sep/2021:08:22:56 +0000] "GET / HTTP/1.1" 302 138 "-" "curl/7.29.0" 78 0.000 [-] [] - - - - 4ffa0129b9fab80b9e904ad9716bd8ca 192.168.31.103 - - [16/Sep/2021:08:22:56 +0000] "GET /demo/ HTTP/1.1" 200 5 "-" "curl/7.29.0" 83 0.003 [default-demo-8002] [] 20.0.32.159:8002 5 0.002 200 3d17d7cb25f3eacc7eb848955a28675f ``` # 注意事項 > 不能定義默認的 `ingress.spec.backend` 字段。否則會發生不符合預期的跳轉。 模擬定義 `ingress.spec.backend` 字段 ```yaml apiVersion: extensions/v1beta1 kind: Ingress metadata: name: app namespace: default annotations: nginx.ingress.kubernetes.io/rewrite-target: /$2 spec: ingressClassName: nginx backend: # 設置默認的backend serviceName: app servicePort: 8001 rules: - host: www.ecloud.com http: paths: - path: /app(/|$)(.*) backend: serviceName: app servicePort: 8001 ``` 查看ingress資源情況 ```shell $ kubectl get ingress NAME CLASS HOSTS ADDRESS PORTS AGE app nginx www.ecloud.com 192.168.31.79 80 20m $ kubectl describe ingress app Name: app Namespace: default Address: 192.168.31.79 Default backend: app:8001 (20.0.32.157:8001) Rules: Host Path Backends ---- ---- -------- www.ecloud.com /app(/|$)(.*) app:8001 (20.0.32.157:8001) Annotations: nginx.ingress.kubernetes.io/rewrite-target: /$2 Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Sync 7m52s (x5 over 21m) nginx-ingress-controller Scheduled for sync ``` 測試訪問 ```shell $ curl www.ecloud.com app $ curl www.ecloud.com/fskl/fskf/ajfk app ``` > 發現不符合 `/app` 的上下文也可以匹配到 `/` 的頁面,這個是不符合我們的預期的。 查看nginx的配置文件 ```shell $ kubectl -n ingress-nginx exec -it ingress-nginx-controller-6c979c5b47-bpwf6 -- bash $ vi /etc/nginx/nginx.conf # 找到 `server_name` 為設置的域名,找到為 `location ~* "^/"` # 沒有匹配到 `/app` 的上下文,則進入該location。 # 該location讀取app應用的 `/` 。所以訪問 `/fskl/fskf/ajfk` 都可以訪問到 `/` 的頁面 # 原本我們的預期是訪問錯了上下文,應該是報 `404` 的,而不是訪問主域名頁面 location ~* "^/" { set $namespace "default"; set $ingress_name "app"; set $service_name "app"; set $service_port "8001"; set $location_path "/" ... } ``` 雖然沒有定義默認的 `ingress.spec.backend` 字段。在 `kubectl describe ingress` 查看ingress詳情時,會有 `Default backend: default-http-backend:80 (<error: endpoints "default-http-backend" not found>)` 提示,但是影響正常使用。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看