印象大使_基本服务-使用大使网关
印象大使
這是我對Knative服務(wù)進(jìn)行實(shí)驗(yàn)的延續(xù),這次是圍繞在Knative服務(wù)應(yīng)用程序之上構(gòu)建網(wǎng)關(guān)。 這建立在我之前的兩篇文章的基礎(chǔ)上- 使用Knative部署Spring Boot App以及在Knative中進(jìn)行服務(wù)到服務(wù)的調(diào)用 。
為什么要在Knative應(yīng)用程序之上使用網(wǎng)關(guān)
為了解釋這一點(diǎn),讓我談?wù)勎乙郧暗牟┛臀恼隆?假設(shè)在Kubernetes環(huán)境中已經(jīng)可以使用Knative服務(wù) ,那么部署應(yīng)用程序的方式就是使用清單,如下所示:
apiVersion: serving.knative.dev/v1alpha1 kind: Service metadata:name: sample-boot-knative-servicenamespace: default spec:runLatest:configuration:revisionTemplate:spec:container:image: bijukunjummen/sample-boot-knative-app:0.0.3-SNAPSHOTenv:- name: ASAMPLE_ENVvalue: "sample-env-val"現(xiàn)在要調(diào)用此應(yīng)用程序,我必須通過Knative服務(wù)創(chuàng)建的入口進(jìn)行調(diào)用,可以在minikube環(huán)境中通過以下方式獲得該入口:
export GATEWAY_URL=$(echo $(minikube ip):$(kubectl get svc knative-ingressgateway -n istio-system -o 'jsonpath={.spec.ports[?(@.port==80)].nodePort}'))現(xiàn)在,該請求必須經(jīng)過入口,并且入口使用Host http標(biāo)頭將請求路由到應(yīng)用。 可以使用以下bash腳本獲取已部署服務(wù)的主機(jī)頭:
export APP_DOMAIN=$(kubectl get services.serving.knative.dev sample-boot-knative-service -o="jsonpath={.status.domain}")然后使用CURL通過knative入口網(wǎng)關(guān)進(jìn)行以下調(diào)用:
curl -X "POST" "http://${GATEWAY_URL}/messages" \-H "Accept: application/json" \-H "Content-Type: application/json" \-H "Host: ${APP_DOMAIN}" \-d $'{"id": "1","payload": "one","delay": "300" }'或使用httpie :
http http://${GATEWAY_URL}/messages Host:"${APP_DOMAIN}" id=1 payload=test delay=1通過knative入口調(diào)用應(yīng)用程序涉及太多步驟:
我在這篇文章中的目的是通過使用諸如Ambassador之類的網(wǎng)關(guān)來簡化向應(yīng)用程序撥打電話的用戶體驗(yàn)。
駐基尼大使
將大使安裝到Knative環(huán)境并沒有什么特別的, 這里提供的出色說明在我的minikube環(huán)境中都能正常工作。
現(xiàn)在,此圖概述了我對網(wǎng)關(guān)的目標(biāo):
有了大使后,用戶所需要做的就是向網(wǎng)關(guān)大使發(fā)送請求,在向Knative Ingress提出請求之前,它將負(fù)責(zé)插入Host標(biāo)頭。
那么,這是如何工作的,相當(dāng)容易! 假設(shè)有大使就位,那么它所需要的就是一個(gè)配置,該配置可以通過以下方式搭載在Kubernetes服務(wù)上:
--- apiVersion: v1 kind: Service metadata:name: sample-knative-app-gatewayannotations:getambassador.io/config: |---apiVersion: ambassador/v0kind: Mappingname: sample-boot-knative-appprefix: /messagesrewrite: /messagesservice: knative-ingressgateway.istio-system.svc.cluster.local host_rewrite: sample-boot-knative-service.default.example.com spec:type: LoadBalancerports:- name: ambassadorport: 80targetPort: 80selector:service: ambassador在這里,我通過Service注釋提供配置,攔截對/ messages uri的所有調(diào)用,并將這些請求轉(zhuǎn)發(fā)至knative ingressgatway服務(wù)(knative-ingressgateway.istio-system.svc.cluster.local),并添加“ sample- boot-knative-service.default.example.com”。
現(xiàn)在,從用戶角度進(jìn)行交互要簡單得多,我要做的就是使用以下bash腳本在minikube環(huán)境中獲取此新服務(wù)的url并進(jìn)行api調(diào)用:
export AMB_URL=$(echo $(minikube ip):$(kubectl get svc sample-knative-app-gateway -n default -o 'jsonpath={.spec.ports[?(@.port==80)].nodePort}'))http http://${AMB_URL}/messages id=1 payload=test delay=1在真實(shí)的代碼上嘗試一下可能會更容易,我的github倉庫可以在這里找到 。
翻譯自: https://www.javacodegeeks.com/2018/09/knative-serving-using-ambassador-gateway.html
印象大使
總結(jié)
以上是生活随笔為你收集整理的印象大使_基本服务-使用大使网关的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Win10无法识别的usb设备怎么解决?
- 下一篇: =空值返回空值_@Parameteriz