当前位置:   article > 正文

使用Spring Boot和Kubernetes构建微服务架构

makemodel

“我喜欢编写身份验证和授权代码。” 〜从来没有Java开发人员。 厌倦了一次又一次地建立相同的登录屏幕? 尝试使用Okta API进行托管身份验证,授权和多因素身份验证。

在本教程中,您将使用Kubernetes将Spring Boot微服务架构部署到Google Cloud,特别是Google Kubernetes Engine(GKE)。 您还将使用Istio创建服务网格层并创建公共网关。 整个事情将使用Okta OAuth JWT身份验证进行保护。

那是一堆烂话。 我们将不在这里深入解释微服务。 简而言之,微服务是一种设计模式,可将较大的单片服务拆分为较小的独立“微”服务。 这些服务通过网络松散耦合。 这种体系结构的好处是,每个服务都变得可测试,可维护且可独立部署。 在互联网规模上,在像Amazon和Netflix这样的大型公司中,这种架构都很棒,因为它允许公司将小型团队的职责分配给可管理的,离散的功能单元。 而不是拥有成千上万的人监督巨大的整体代码块。 不利之处是复杂性和基础架构的高昂初始成本,这对于无法规模化的较小项目可能没有意义。

Kubernetes是用于部署容器化服务的平台。 您可以将其视为Docker容器的容器协调器(这是一种简化,但是可以使用)。 这将使我们能够编写YAML脚本,以自动将微服务架构部署到我们选择的平台GKE。 这是一个庞大的项目,需要深入研究。 看看他们的文档以了解更多信息。

Istio在Kubernetes的基础上又增加了一层功能,增加了一些出色的监视,安全性,访问控制和负载平衡功能。 查看他们的网站以获取更多信息。

微服务架构的最后一部分是Google Cloud和GKE 。 这是您将用于部署微服务的平台。 本教程中未介绍的另一个选项是Minikube。 Minikube在您的计算机上本地运行,可能对某些人有用。 我发现Google Kubernetes Engine更易于使用且性能更高。

我们假设您熟悉Spring Boot和Java。 如果不是这样,请查看教程末尾的一些链接以帮助您入门。

Spring Boot和Kubernetes的要求

HTTPie :从他们的网站安装HTTPie,以便我们可以轻松地从终端运行HTTP请求。

Docker :如果尚未安装Docker Desktop,请从其网站下载并安装。

kubectl :这是Kubernetes的命令行界面。 有关安装说明,请参见其网站

Google Cloud :您需要一个启用了计费功能的Google Cloud帐户。 有一个免费试用版,其中应包括足够的学分和时间,以帮助您完成本教程。 转到Google Cloud网站并注册。

developer.okta.com :我们在开发人员网站上提供免费的开发人员帐户。 请立即注册一个。 您将在本教程结束时使用它。

gcloud :这是Google Cloud CLI。 按照其网站上的说明进行安装 。 完成此操作后,您需要通过运行以下命令来安装gcloud kubectl组件:

gcloud components install kubectl

我是否提到微服务的初始复杂性成本很高?

使用Istio创建一个Google Kubernetes Engine项目

您现在应该拥有一个启用了结算功能的Google Cloud帐户。 同样,您实际上不需要花任何钱,但是如果不付款,您将无法访问免费试用版。

创建一个新项目。 将其命名为spring-boot-gke (或任何您想使用的名称,但是您需要各种命令的项目ID)。 等待项目创建。

项目名称的结尾可能会带有一个ID号,例如spring-boot-gke-232934 。 您将需要几次该项目名称,因此请继续将其存储在shell变量中并记下它。

PROJECT_NAME=<your project name and ID>

项目准备就绪后,打开项目仪表板,打开导航菜单,然后单击Kubernetes Engine 。 单击启用帐单按钮(如果尚未启用帐单),然后选择一个帐单帐户。

单击创建集群

微服务架构

在左侧面板中,选择您的第一个集群

将集群命名为“ spring-boot-cluster”。

选择区域“ us-west1-a”。

单击集群配置面板底部的“ 高级选项”链接以显示高级选项。 向下滚动到底部,然后选中Enable Istio(beta)复选框。 这将自动在群集上安装Istio。

微服务架构

在底部,单击创建以创建集群。 喝咖啡或休息一下; 创建集群将需要几分钟。

同时,如果尚未安装,请继续运行以下命令来初始化gcloud CLI:

gcloud init

在初始化过程中,可以将新项目设置为默认项目,并将项目区域设置为默认区域。

部署集群后,您需要使用以下命令将本地gcloudkubectl CLI连接到该集群:

gcloud container clusters get-credentials {yourClusterName} --zone us-west1-a --project {yourProjectId}

如果您使用了其他项目名称,则需要更改命令以反映该名称。

注意:如果单击Google Cloud Platform仪表板右侧的“ 连接”按钮,您将看到正确的命令,可输入:

微服务架构

结果,您应该看到类似以下的内容:

  1. Fetching cluster endpoint and auth data.
  2. kubeconfig entry generated for spring-boot-cluster.

您还需要为自己赋予集群管理员权限:

kubectl create clusterrolebinding cluster-admin-binding --clusterrole=cluster-admin --user=$(gcloud config get-value core/account)

现在,您需要检查并确保Istio服务已安装并正在运行。 有两种检查方法。 首先,在您的Google Cloud Platform Kubernetes Engine仪表板中,单击“ 服务”按钮。 您应该在spring-boot-cluster看到Istio服务的列表。 它们的状态列下都应有绿色的“确定”。

在此期间,请注意类型为LoadBalancer名为istio-ingressgateway的服务。 这是群集的公共负载平衡器,该条目显示公共IP和开放端口。

微服务架构

另一种检查方法是使用kubectl CLI。

要检查服务,请使用以下命令: kubectl get services --all-namespaces 。 必须使用--all-namespaces才能显示istio-system命名空间中的Istio服务。

  1. $ kubectl get services --all-namespaces
  2. NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
  3. default kubernetes ClusterIP 10.31.240.1 <none> 443/TCP 5m
  4. istio-system istio-citadel ClusterIP 10.31.252.214 <none> 8060/TCP,9093/TCP 3m
  5. istio-system istio-egressgateway ClusterIP 10.31.247.186 <none> 80/TCP,443/TCP 3m
  6. istio-system istio-galley ClusterIP 10.31.249.131 <none> 443/TCP,9093/TCP 3m
  7. istio-system istio-ingressgateway LoadBalancer 10.31.244.186 35.185.213.229 80:31380/TCP,443:31390/TCP,31400:31400/TCP,15011:30675/TCP,8060
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/秋刀鱼在做梦/article/detail/915770
推荐阅读
相关标签
  

闽ICP备14008679号