在Kubernetes上基于Istio服务网格建立Spring Boot应用源码

该开源项目在kubernetes集群中部署了两个微服务,并将这些服务与istio 服务网格互连。

为什么这样做?
我们通过建立Spring Cloud Netflix环境已经非常成功。我们无需太多努力就能创建可扩展且容错的应用程序基础架构。虽然我们已经是站在巨人的肩膀上,可以用spring boot starter把一切粘合起来,但我们仍然需要在代码中放置基础设施逻辑。我们需要在代码中明确处理服务发现、失败请求等等。

Istio通过在应用程序的每个pod中提供sidecar代理,这是另外一种方法。应用程序之间调用可以通过调用代表服务网格的代理实现,由此将基础逻辑移出了微服务。

在minikube上安装
请按照以下链接在新的minikube群集中安装istio。按照这些步骤操作后,将边车代理自动注入K8s。Istio的基础设施会自动注入POD。因此,您无需扩展配置即可从istio中受益。
https://istio.io/docs/setup/kubernetes/download-release/
https://istio.io/docs/setup/kubernetes/platform-setup/minikube/ https://istio.io/docs/setup/kubernetes/helm-install/installation-steps https://istio.io/docs/setup/kubernetes/helm-install/option-2-install-with-helm-and-tiller-via-helm-install

启用自动边车注入
在执行安装步骤之后,部署了istio并且可以自动将边车注入K8s的POD以后。需要通过将istio-injection = enabled - 设置为所需的命名空间来启用。

kubectl label namespace default istio-injection=enabled

部署应用程序
helm upgrade test . -i -w

访问该应用程序
你可以定义入口资源以使流量可用于外部世界。这是非常简单的方法,但你会错过重要的功能。
#
因此,发布服务的首选方式是使用自定义的Istio资源。

首先,我们定义一个Gateway处理负载平衡,其次是用VirtualService定义路由逻辑。

相关文档:
https://istio.io/docs/tasks/traffic-management/ingress/configuring-ingress-using-an-istio-gateway

下面需要了解如何访问服务。istio ingress服务已经绑定到我们需要查找的随机节点端口。只需运行以下命令即可从群集中检索到信息。


KUBE_HOST=$(minikube ip)
ISTIO_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].nodePort}')

echo "http://$KUBE_HOST:$ISTIO_PORT"

在浏览器中打开该页面并查看应用程序输出。

Istio代理状态
检查istio网格的状态:

istioctl proxy-status

输出:


➜ istio istioctl proxy-status
PROXY CDS LDS EDS RDS PILOT VERSION
istio-egressgateway-6cff45b4db-4wzsz.istio-system SYNCED SYNCED SYNCED (100%) STALE istio-pilot-6cd95f9cc4-9vwk7 1.0.0
istio-ingressgateway-fc648887c-j978j.istio-system SYNCED SYNCED SYNCED (100%) SYNCED istio-pilot-6cd95f9cc4-9vwk7 1.0.0
sleep-86f6b99f94-g67fc.default SYNCED SYNCED SYNCED (100%) SYNCED istio-pilot-6cd95f9cc4-9vwk7 1.0.0
test-plain-backend-7987b6c8cf-bt7wr.default SYNCED SYNCED SYNCED (100%) SYNCED istio-pilot-6cd95f9cc4-9vwk7 1.0.0
test-plain-backend-7987b6c8cf-m667s.default SYNCED SYNCED SYNCED (100%) SYNCED istio-pilot-6cd95f9cc4-9vwk7 1.0.0
test-plain-frontend-7db44ffbd-k5jrj.default SYNCED SYNCED SYNCED (100%) SYNCED istio-pilot-6cd95f9cc4-9vwk7 1.0.0
test-plain-frontend-7db44ffbd-rvtdt.default SYNCED SYNCED SYNCED (100%) SYNCED istio-pilot-6cd95f9cc4-9vwk7 1.0.0

按照日志查看istio的运行情况。您可以使用kail之类的工具在一个位置查看所有日志消息。

marcopaga/sample-istio-service-mesh-on-kubernetes:
[该贴被banq于2018-08-16 18:47修改过]