中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何理解Knative Serving中的路由管理和 Ingress

發布時間:2021-10-12 11:05:35 來源:億速云 閱讀:155 作者:柒染 欄目:云計算

本篇文章給大家分享的是有關如何理解Knative Serving中的路由管理和 Ingress,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

Knative 默認會為每一個 Service 生成一個域名,并且 Istio Gateway 要根據域名判斷當前的請求應該轉發給哪個 Knative Service。Knative 默認使用的主域名是 example.com,這個域名是不能作為線上服務的。本文我首先介紹一下如何修改 默認主域名,然后再深入一層介紹如何添加自定義域名以及如何根據 path 關聯到不同的 Knative Service。

Knative Serving 的默認域名 example.com

首先需要部署一個 Knative Service,可以參考 Knative 初體驗:Serving Hello World。如果你已經有了一個 Knative 集群,那么直接把下面的內容保存到 helloworld.yaml 文件中。然后執行一下 kubectl apply -f helloworld.yaml  即可把 hello 服務部署到 helloworld namespace 中。

---
apiVersion: v1
kind: Namespace
metadata:
  name: helloworld

---
apiVersion: serving.knative.dev/v1alpha1
kind: Service
metadata:
  name: hello
  namespace: helloworld
spec:
  template:
    metadata:
      labels:
        app: hello
      annotations:
        autoscaling.knative.dev/target: "10"
    spec:
      containers:
        - image: registry.cn-hangzhou.aliyuncs.com/knative-sample/simple-app:132e07c14c49
          env:
            - name: TARGET
              value: "World!"

現在我們來看一下 Knative Service 自動生成的域名配置:

└─# kubectl -n helloworld get ksvc
NAME    URL                                   LATESTCREATED   LATESTREADY   READY   REASON
hello   http://hello.helloworld.example.com   hello-wsnvc     hello-wsnvc   True

現在使用 curl 指定 Host 就能訪問服務了。

  • 首先獲取到 Istio Gateway IP

└─# kubectl get svc istio-ingressgateway --namespace istio-system --output jsonpath="{.status.loadBalancer.ingress[*]['ip']}"
47.95.191.136
  • 訪問 hello 服務

└─# curl -H "Host: hello.helloworld.example.com" http://47.95.191.136/
Hello World!!

如果想要在瀏覽器中訪問 hello 服務需要先做 host 綁定,把域名 hello.helloworld.example.com 指向 47.95.191.136 才行。這種方式還不能對外提供服務。

使用自定義主域名

下面我來介紹一下如何把默認的 example.com 改成我們自己的域名,假設我們自己的域名是:serverless.kuberun.com,現在執行 kubectl edit cm config-domain --namespace knative-serving 如下圖所示,添加 serverless.kuberun.com 到 ConfigMap 中,然后保存退出就完成了自定義主域名的配置。

如何理解Knative Serving中的路由管理和 Ingress

再來看一下 Knative Service 的域名, 如下所示已經生效了。

└─# kubectl -n helloworld get ksvc
NAME    URL                                              LATESTCREATED   LATESTREADY   READY   REASON
hello   http://hello.helloworld.serverless.kuberun.com   hello-wsnvc     hello-wsnvc   True

泛域名解析
Knative Service 默認生成域名的規則是 servicename.namespace.use-domain 。所以不同的 namespace 會生成不同的子域名,每一個 Knative Service 也會生成一個唯一的子域名。為了保證所有的 Service 服務都能在公網上面訪問到,需要做一個泛域名解析。把 *.serverless.kuberun.com 解析到 Istio Gateway 47.95.191.136 上面去。如果你是在阿里云(萬網)上面購買的域名,你可以通過如下方式配置域名解析:

如何理解Knative Serving中的路由管理和 Ingress

現在直接通過瀏覽器訪問 http://hello.helloworld.serverless.kuberun.com/ 就可以直接看到 helloworld 服務了:
如何理解Knative Serving中的路由管理和 Ingress

## 自定義服務域名
剛才我們給 Knative 指定了一個主域名,使得 Service 基于主域名生成自己的唯一域名。但自動生成的域名不是很友好,比如剛才部署的 helloworld 的域名 hello.helloworld.serverless.kuberun.com對于普通用戶來說意義不明顯、不好記憶。
如果能通過 hello.kuberun.com 訪問 hello world 服務那就完美了,接下來我來介紹實現方法:

  • 先在萬網上面修改域名解析,把 hello.kuberun.com 的 A 記錄指向 Istio Gateway 47.95.191.136 
    如何理解Knative Serving中的路由管理和 Ingress

  • hello.kuberun.com 解析到 Istio Gateway 以后 Istio Gateway 并不知道此應該轉發到哪個服務,所以還需要配置 VirtualService 告知 Istio 如何轉發,把下面的內容保存到 hello-ingress-route.yaml 文件:

    apiVersion: networking.istio.io/v1alpha3
    kind: VirtualService
    metadata:
    name: hello-ingress-route
    namespace: knative-serving
    spec:
    gateways:
    - knative-ingress-gateway
    hosts:
    - hello.helloworld.serverless.kuberun.com
    - hello.kuberun.com
    http:
    - match:
     - uri:
         prefix: "/"
     rewrite:
       authority: hello.helloworld.svc.cluster.local
     retries:
       attempts: 3
       perTryTimeout: 10m0s
     route:
     - destination:
         host: istio-ingressgateway.istio-system.svc.cluster.local
         port:
           number: 80
       weight: 100
     timeout: 10m0s
     websocketUpgrade: true


    現在打開 http://hello.kuberun.com/ 就能看到 helloworld 服務了:

如何理解Knative Serving中的路由管理和 Ingress

基于路徑的服務轉發
真實線上服務的場景可能是一個路徑后端對應著一個應用,現在我們對剛才的 hello.kuberun.com 進行一下擴展。讓 /blog 開頭的路徑映射到 blog service,其他的路徑還是原樣打到 hello service 上面。
把下面的內容保存到 blog.yaml 文件,然后執行:  kubectl apply -f blog.yaml 即可完成 blog 服務的部署。

---
apiVersion: v1
kind: Namespace
metadata:
 name: blog

---
apiVersion: serving.knative.dev/v1alpha1
kind: Service
metadata:
 name: hello-blog
 namespace: blog
spec:
 template:
   metadata:
     labels:
       app: hello
     annotations:
       autoscaling.knative.dev/target: "10"
   spec:
     containers:
       - image: registry.cn-hangzhou.aliyuncs.com/knative-sample/simple-app:132e07c14c49
         env:
           - name: TARGET
             value: "Blog!"

查看 blog 服務的默認域名:

└─# kubectl -n blog get ksvc
NAME    URL                                        LATESTCREATED   LATESTREADY   READY   REASON
hello   http://hello-blog.blog.serverless.kuberun.com   hello-zbm7q     hello-zbm7q   True

現在使用瀏覽器打開 http://hello-blog.blog.serverless.kuberun.com 就可以訪問剛剛部署的服務了:
如何理解Knative Serving中的路由管理和 Ingress

這是默認域名,我們的需求是想要通過 http://hello.kuberun.com/blog 訪問, 所以還需要修改 Istio VirtualService 的配置。如下所示在 hello-ingress-route.yaml 增加 /blog 的配置:

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: hello-ingress-route
  namespace: knative-serving
spec:
  gateways:
  - knative-ingress-gateway
  hosts:
  - hello.helloworld.serverless.kuberun.com
  - hello.kuberun.com
  http:
  - match:
    - uri:
        prefix: "/blog"
    rewrite:
      authority: hello-blog.blog.svc.cluster.local
    retries:
      attempts: 3
      perTryTimeout: 10m0s
    route:
    - destination:
        host: istio-ingressgateway.istio-system.svc.cluster.local
        port:
          number: 80
      weight: 100
  - match:
    - uri:
        prefix: "/"
    rewrite:
      authority: hello.helloworld.svc.cluster.local
    retries:
      attempts: 3
      perTryTimeout: 10m0s
    route:
    - destination:
        host: istio-ingressgateway.istio-system.svc.cluster.local
        port:
          number: 80
      weight: 100
    timeout: 10m0s
    websocketUpgrade: true

現在就能在瀏覽器中打開 http://hello.kuberun.com/blog 如下所示:
如何理解Knative Serving中的路由管理和 Ingress

這里主要圍繞 Knative Service 域名展開介紹了 Knative Service 的路由管理。

以上就是如何理解Knative Serving中的路由管理和 Ingress,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

延吉市| 靖西县| 大城县| 神木县| 武清区| 顺义区| 平乡县| 时尚| 广州市| 仪征市| 乐安县| 缙云县| 三门县| 松桃| 綦江县| 东宁县| 华宁县| 龙岩市| 奇台县| 剑阁县| 武宁县| 股票| 沙坪坝区| 吉安县| 古蔺县| 罗甸县| 高雄县| 中西区| 历史| 墨竹工卡县| 镇原县| 祁连县| 张北县| 宕昌县| 隆化县| 建水县| 阳谷县| 潞城市| 京山县| 多伦县| 清新县|