在上一篇文章中,我介绍了如何使用Knative的 Serving功能来运行示例Java应用程序。 这篇文章将介绍部署两个应用程序的步骤,其中一个应用程序调用另一个。
样品细节
整个示例可在我的github存储库中找到– https://github.com/bijukunjummen/sleuth-webflux-sample。
这些应用程序是基于Spring Boot的。 后端应用程序在用如下所示的有效负载调用时会公开一个端点“ / messages”:
{"delay": "0","id": "123","payload": "test","throw_exception": "true"
}
将在指定的延迟后做出响应。 如果有效负载的“ throw_exception”标志设置为true,则它将在指定的延迟后返回5XX。
客户端应用程序公开一个“ / passthrough / messages”终结点,该终结点接收完全相同的有效负载,然后将其转发给后端应用程序。 后端应用程序的URL作为“ LOAD_TARGET_URL”环境属性传递到客户端应用程序。
部署为基础服务
该项目的子文件夹knative包含用于为2个应用程序部署Knative服务的清单。 后端应用程序的knative服务清单如下所示:
apiVersion: serving.knative.dev/v1alpha1
kind: Service
metadata:name: sample-backend-appnamespace: default
spec:runLatest:configuration:revisionTemplate:spec:container:image: bijukunjummen/sample-backend-app:0.0.1-SNAPSHOTenv:- name: VERSIONvalue: "0.0.2-SNAPSHOT"- name: SERVER_PORTvalue: "8080"
客户端应用必须指向后端服务,并在规范中指定:
apiVersion: serving.knative.dev/v1alpha1
kind: Service
metadata:name: sample-client-appnamespace: default
spec:runLatest:configuration:revisionTemplate:spec:container:image: bijukunjummen/sample-client-app:0.0.2-SNAPSHOTenv:- name: VERSIONvalue: "0.0.1-SNAPSHOT"- name: LOAD_TARGET_URLvalue: http://sample-backend-app.default.svc.cluster.local- name: SERVER_PORTvalue: "8080"
域“ sample-backend-app.default.svc.cluster.local”指向由Knative服务服务资源创建的后端服务的dns名称
测试中
对于我来说,简单地用我的测试方式来制作一个小视频就更容易了:
就像我以前的文章中一样 ,对应用程序的请求是通过knative入口网关进行的,可以通过以下方式(对于minikube环境)获取url:
export GATEWAY_URL=$(echo $(minikube ip):$(kubectl get svc knative-ingressgateway -n istio-system -o 'jsonpath={.spec.ports[?(@.port==80)].nodePort}'))
并以以下方式发出了示例请求,请注意,网关中的路由是通过主机标头(在本例中为“ sample-client-app.default.example.com”)进行的:
export CLIENT_DOMAIN=$(kubectl get services.serving.knative.dev sample-client-app -o="jsonpath={.status.domain}")http http://${GATEWAY_URL}/passthrough/messages Host:"${CLIENT_DOMAIN}" id=1 payload=test delay=100 throw_exception=false
翻译自: https://www.javacodegeeks.com/2018/09/knative-serving-service-service-call.html