Google Kubernetes引擎上使用Istio简化微服务 — 第II部分 (译)

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
注册配置 MSE Nacos/ZooKeeper,118元/月
简介: Google Kubernetes引擎上使用Istio简化微服务 — 第II部分 (译)

Google Kubernetes引擎上使用Istio简化微服务 — 第II部分


作者:Nithin Mallya

翻译:狄卫华

首发: https://mp.weixin.qq.com/s/3jBza5239cFe4dIVzP_kegServiceMesh中文网

原文:Simplifying Microservices with Istio in Google Kubernetes Engine — Part II

原文链接:https://medium.com/google-cloud/simplifying-microservices-with-istio-in-google-kubernetes-engine-part-ii-7461b1833089


本系列翻译链接:


我所写的关于 Istio 的文章是 Istio 非常棒的官方文档 中的一部分。如果想了解更多,请阅读官方文档。


在本系列 第一部分PartI , 我们展示了如何使用 Istio 简化我们微服务间的通信。


在这个部分,我们将会看到在服务网格内部的服务是如何与外部服务通过 HTTPS 协议进行通信的


                                          图1:微服务通信模型的逻辑视图


在上面的图1,PetService(直接与 PetDetailsService 和 PetMedicalHistoryService 服务进行通信)现在将也会调用外部的服务,外部服务位于 https://thedogapi.co.uk,返回 dog 图片的 url 地址。


Istio 服务网格与外部的服务通信展示在下面的图 2 所示。


  • 与往常一样,在服务网格内的服务通信通过HTTP协议代理
  • 与使用 HTTPS 协议的外部服务通信,内部服务仍然是发送 HTTP 请求,HTTP 请求会被以边车(sidecar)方式部署的代理所拦截,并作为 TLS 协议的发起方与外部的服务在加密通道上进行通信


                                  图2: Istio 服务网格展示与外部服务通信


Github repo

petservice 代码如下所示:


备注:展示我们如何调用 DogAPI https,地址为 http://api.thedogapi.co.uk:443/v2/dog.php


让我们看一下当运行以下命令时会发生什么?其中 108.59.82.93 为 入口(Ingress)IP 地址 (参见 第一部分)

curl http://108.59.82.93/pet/123

响应内容如下:

{
  "petDetails": {
    "petName": "Maximus",
    "petAge": 5,
    "petOwner": "Nithin Mallya",
    "petBreed": "Dog"
  },
  "petMedicalHistory": {
    "vaccinationList": [
      "Bordetella, Leptospirosis, Rabies, Lyme Disease"
    ]
  },
  "dogAPIResponse": {
    "message": "request to https://api.thedogapi.co.uk/v2/dog.php failed, reason: read ECONNRESET",
    "type": "system",
    "errno": "ECONNRESET",
    "code": "ECONNRESET"
  }
}


你会注意到当 petservice 访问位于 https://api.thedogapi.co.uk 的外部服务时,上述的响应内容中 dogAPIResponse(不是最原始的名字)部分有一个错误信息。


这是因为所有外部的流量(egress)在默认情况下被阻止。在前面的文章中解释过边车(sidecar)代理只允许集群内的通信。


备注:正如我在第一部分提及的那样,当我们想要管控服务与外部服务通信的方式和阻止任何未经授权的访问的时候,这个限制非常有用。

医疗保健/金融系统可以特别利用此功能来保护PHI / PII数据不会被无意地甚至恶意地从内部服务中共享。


为了启用出口(egress)流量,你需要创建如下所示的出口规则(egress rule):

cat <<EOF | istioctl create -f -
apiVersion: config.istio.io/v1alpha2
kind: EgressRule
metadata:
  name: dogapi-egress-rule
spec:
  destination:
    service: api.thedogapi.co.uk
  ports:
    - port: 443
      protocol: https
EOF

为了检查该出口规则(egress rule)是否已被创建,你可以运行下面的命令,你应该看到出口规则(egress rule)dogapi-egress-rule已经被创建。


$ kubectl get egressrule
NAME                 AGE
dogapi-egress-rule   5m

我们再次运行上面的 curl 命令:


$ curl http://108.59.82.93/pet/123
{
  "petDetails": {
    "petName": "Maximus",
    "petAge": 5,
    "petOwner": "Nithin Mallya",
    "petBreed": "Dog"
  },
  "petMedicalHistory": {
    "vaccinationList": [
      "Bordetella, Leptospirosis, Rabies, Lyme Disease"
    ]
  },
  "dogAPIResponse": {
    "count": 1,
    "api_version": "v2",
    "error": null,
    "data": [
      {
        "id": "rCaz-LNuzCC",
        "url": "https://i.thedogapi.co.uk/rCaz-LNuzCC.jpg",
        "time": "2017-08-30T21:43:03.0",
        "format": "jpg",
        "verified": "1",
        "checked": "1"
      }
    ],
    "response_code": 200
  }
}

已经可以工作了,我们可以从 DogAPI 响应的样例中看到返回的 Pet 图片地址。


结论:我们看到如何通过创建明确规则来启用从服务网格(service mesh )到外部服务的通信。


在后续的文章中,我们将会看到如何实施其他重要的任务比如流量路由(traffic routing)和流量变化(ramping),使用断路器(circuit breaker)等。


资源:


  1. 本系列文章的第 I 部分: https://medium.com/google-cloud/simplifying-microservices-with-istio-in-google-kubernetes-engine-part-i-849555f922b8
  2. Istio 官方地址 https://istio.io/
  3. DevOxx 的RayTsang的Istio演讲材料: https://www.youtube.com/watch?v=AGztKw580yQ&t=231s
  4. 案例的Github: https://github.com/nmallya/istiodemo
  5. Kubernetes: https://kubernetes.io/
  6. DogAPI 网址: https://thedogapi.co.uk/
相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
Kubernetes Linux Docker
Kubernetes v1.22.1部署报错3:.com/google_containers/coredns:v1.8.4...
Kubernetes v1.22.1部署报错3:.com/google_containers/coredns:v1.8.4...
233 0
|
13天前
|
Kubernetes 安全 微服务
使用 Istio 缓解电信 5G IoT 微服务 Pod 架构的安全挑战
使用 Istio 缓解电信 5G IoT 微服务 Pod 架构的安全挑战
38 8
|
18天前
|
Kubernetes 负载均衡 安全
Istio在微服务中释放服务网格的力量
Istio在微服务中释放服务网格的力量
40 4
|
2月前
|
负载均衡 监控 安全
Istio:微服务治理的超级英雄,一键解锁你的服务网格超能力,让管理复杂变简单!
【8月更文挑战第31天】随着云原生技术的发展,微服务架构成为主流,但其复杂性与管理难题也随之增加。Istio作为开源服务网格平台,通过独特的数据平面和控制平面设计,实现了微服务通信的透明管理,简化了治理复杂度。本文将对比Istio与传统微服务管理方法,详细介绍Istio的架构及其工作原理,包括Envoy代理、服务发现、负载均衡、流量管理、安全认证以及监控等功能。Istio不仅简化了微服务治理,还提供了强大的流量控制和安全机制,使开发者能更高效地管理应用。
57 2
|
2月前
|
开发者 项目管理 开发工具
震惊!单人开发者如何成功过渡到团队协作?Xamarin 项目管理经验大揭秘,让你的开发之路一帆风顺!
【8月更文挑战第31天】Xamarin 是移动应用开发领域的热门跨平台工具,适用于个人开发者及团队。个人开发时需明确需求、运用版本控制(如 Git)并合理规划项目结构以增强代码可维护性。团队协作时,则需建立有效沟通渠道、统一代码规范、严格版本控制及合理分配任务,以提升开发效率与项目质量。
49 1
|
2月前
|
Kubernetes 安全 微服务
使用 Istio 缓解电信 5G IoT 微服务 Pod 架构的安全挑战
在5G电信领域,Kubernetes集群中部署微服务至关重要,但也带来了重大的安全挑战。Istio作为一个强大的开源服务网格,能有效地管理这些微服务间的通信,通过其控制平面自动将Sidecar代理注入到各微服务Pod中,确保了安全且高效的通信。Istio的架构由数据平面和控制平面组成,其中Sidecar代理作为Envoy代理运行在每个Pod中,拦截并管理网络流量。此外,Istio支持多种Kubernetes发行版和服务,如EKS等,不仅增强了安全性,还提高了应用性能和可观测性。
69 0
使用 Istio 缓解电信 5G IoT 微服务 Pod 架构的安全挑战
|
2月前
|
运维 Kubernetes Cloud Native
OpenKruise:云原生应用自动化的超级引擎,让Kubernetes焕发超能力!
【8月更文挑战第8天】在现代云计算中,云原生应用借助Kubernetes实现了标准化部署。OpenKruise作为扩展工具库,增强了Kubernetes的功能,提供自动化管理复杂应用的能力。通过兼容的控制器、CRDs及Operator模式,OpenKruise简化了应用操作。用户可通过Helm安装,并利用如CloneSet等功能高效复制与管理Pods,从而专注于业务开发而非运维细节,提升云原生应用的灵活性与效率。
75 6
|
4月前
|
Kubernetes 监控 负载均衡
Istio:微服务开发的终极利器,你还在为繁琐的通信和部署流程烦恼吗?
本文介绍了服务网格(Service Mesh)的概念及其在微服务架构中的重要性。微服务强调围绕业务构建团队和去中心化的数据管理,带来更高的灵活性和扩展性。然而,随着服务数量增加,网络通信成为挑战,包括服务发现、路由和安全等问题。 Service Mesh如Istio应运而生,通过边车代理解决服务间通信,提供服务发现、负载均衡、智能路由、安全和监控等功能。它与Kubernetes结合,增强了容器环境的服务管理能力。Istio的bookinfo示例展示了其在多语言微服务中的应用,简化了代码中的服务调用逻辑,使开发更专注于业务本身。
603 3
Istio:微服务开发的终极利器,你还在为繁琐的通信和部署流程烦恼吗?
|
5月前
|
分布式计算 Kubernetes 监控
容器服务Kubernetes版产品使用合集之registry.aliyuncs.com/google_containers 镜像仓库的地址是什么
容器服务Kubernetes版,作为阿里云提供的核心服务之一,旨在帮助企业及开发者高效管理和运行Kubernetes集群,实现应用的容器化与微服务化。以下是关于使用这些服务的一些建议和合集,涵盖基本操作、最佳实践、以及一些高级功能的使用方法。
496 0
|
11月前
|
Kubernetes Cloud Native Docker
Kubernetes(K8s):未来云原生应用的引擎
云原生应用的兴起已经改变了应用程序开发和部署的方式。在这个新的应用程序开发范式中,Kubernetes(简称K8s)已经崭露头角,被认为是引擎的角色。本文将深入研究Kubernetes,探讨它是如何成为云原生应用的引擎的,以及为什么它在现代软件开发中变得如此重要。
174 1