天天看點

服務路由管理

本文選自 《Knative 雲原生應用開發指南》

更多雲原生技術資訊可關注 阿裡巴巴雲原生技術圈

Knative Serving 的預設域名 example.com

首先需要部署一個 Knative Service。如果你已經有了一個 Knative 叢集,那麼直接把下面的内容儲存到 login-service.yaml 檔案中。然後執行一下

kubectl apply -f login-service.yaml

 即可把 login-service 服務部署到 default namespace 中。

apiVersion: serving.knative.dev/v1alpha1
kind: Service
metadata:
  name: login-service
spec:
  template:
    metadata:
      labels:
        app: login-service
      annotations:
        autoscaling.knative.dev/target: "10"
    spec:
      containers:
        - image: registry.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-go:73fbdd56
          env:
            - name: TARGET
              value: "Login Service"           

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

└─# kubectl -n default get ksvc
NAME    URL                                   LATESTCREATED   LATESTREADY   READY   REASON
login-service   http://login-service.default.example.com   login-service-wsnvc     login-service-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           
  • 通路 login-service 服務
└─# curl -H "Host: login-service.default.example.com" http://47.95.191.136/
Hello Login Service           

如果想要在浏覽器中通路 login-service 服務需要先做 host 綁定,把域名 login-service.default.example.com 指向 47.95.191.136 才行。這種方式還不能對外提供服務。下面接着介紹一下如何把預設的 example.com 改成我們自己的域名。

使用自定義主域名

在阿裡雲 Knative 使用者可以通過控制台配置自定義域名,并基于Path和Header進行路由轉發設定。如圖所示:

服務路由管理

假設我們自己的域名是:knative.kuberun.com,現在執行

kubectl edit cm config-domain --namespace knative-serving

如下圖所示,添加 knative.kuberun.com 到 ConfigMap 中,然後儲存退出就完成了自定義主域名的配置。

服務路由管理

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

└─# kubectl -n default get ksvc
NAME    URL                                              LATESTCREATED   LATESTREADY   READY   REASON
login-service   http://login-service.default.knative.kuberun.com   login-service-wsnvc     login-service-wsnvc   True           

泛域名解析

Knative Service 預設生成域名的規則是 servicename.namespace.use-domain 。是以不同的 namespace 會生成不同的子域名,每一個 Knative Service 也會生成一個唯一的子域名。為了保證所有的 Service 服務都能在公網上面通路到,需要做一個泛域名解析。把

*.knative.kuberun.com

 解析到 Istio Gateway 47.95.191.136 上面去。如果你是在阿裡雲(萬網)上面購買的域名,你可以通過如下方式配置域名解析:

服務路由管理

現在直接通過浏覽器通路

http://login-service.default.knative.kuberun.com/

就可以直接看到 login-service 服務了:

服務路由管理

自定義域名

登入阿裡雲容器服務控制台,進入【Knative】-【元件管理】,點選 Serving 元件【詳情】。

服務路由管理

進入詳情之後,選擇域名配置,添加自定義域名:test.knative.kuberun.com。點選 【确定】進行儲存。

服務路由管理

配置路由轉發

進入【Knative】-【服務管理】控制台,選擇對應的服務。這裡我們對 Login-Service 服務 以及 Search-Service 服務分别設定不同的 Path 進行通路。

Login-Service 服務路由轉發配置

選擇  Login-Service 服務, 選擇 路由轉發 頁簽,點選 配置, 選擇

test.knative.kuberun.com

域名,配置路徑:/login。點選 确定 進行儲存。

服務路由管理

接下了繼續配置Search-Service 服務路由規則。

Search-Service 服務路由轉發配置

選擇  Search-Service 服務, 選擇 路由轉發 頁簽,點選 配置, 選擇

test.knative.kuberun.com

域名,配置路徑:/search。點選 确定 進行儲存。

服務路由管理

服務通路

以上路由轉發配置完成之後,我們開始測試一下服務通路:

在浏覽器中輸入:

http://test.knative.kuberun.com/login

可以看到輸出:Hello Login Service!

服務路由管理
http://test.knative.kuberun.com/search

可以看到輸出:Hello Search Service!

服務路由管理

基于 Path + Header 進行路由轉發

選擇  Login-Service 服務, 選擇

路由轉發

頁簽,點選 配置,這裡我們加上Header 配置:foo=bar。點選 确定 進行儲存。

服務路由管理

通路

發現服務 404 不可通路。

服務路由管理

說明基于Header是生效的,下面我們在通路請求中通過 ModHeader 插件配置上Header:foo=bar.

服務路由管理

配置完成之後,我們再一次通路服務:

服務路由管理

服務通路 OK。這樣我們就完成了基于 Path + Header 路由轉發配置

總結

以上主要圍繞 Knative Service 域名配置展開介紹了 Knative Serving 的路由管理,并且通過阿裡雲 Knative 控制台讓你更輕松、快捷的實作自定義域名及路由規則,以打造生産可用的服務通路。

阿裡巴巴雲原生 關注微服務、Serverless、容器、Service Mesh 等技術領域、聚焦雲原生流行技術趨勢、雲原生大規模的落地實踐,做最懂雲原生開發者的技術圈。”

繼續閱讀