写点什么

快速体验 MicroK8s 开箱即用的服务网格

作者:Flomesh
  • 2022 年 9 月 20 日
    北京
  • 本文字数:2857 字

    阅读完需:约 9 分钟

快速体验 MicroK8s 开箱即用的服务网格

MicroK8s 在上个月发布的 1.25 版本中加入了服务网格组件 osm-edge,自此通过 MicroK8s 管理的基础设施搭配轻量级的服务网格 osm-edge,将服务网格能力延伸到了边缘计算场景。

MicroK8s

MicroK8s 是一个 Kubernetes 发行版,以功能强大、重量轻、生产可靠著称。同时,还提供了开箱即用的生产级附加组件。MicroK8s 支持到达 42 种 Linux 发行版,以及使用 Multipass 的 Mac 和 Windows,支持 x86、ARM64 等多种计算架构,有着非常强的软硬件兼容性。可以实现 Kubernetes 集群的一键部署,从个人开发的实验环境到生产环境都能满足需求。

osm-edge

osm-edge 是针对边缘计算环境设计的服务网格,采用 osm 作为控制平面,采用 Pipy 作为数据平面,具有高性能、低资源、简单、易用、易扩展、广泛兼容(支持 x86/arm64/龙芯/RISC-V)的特点。

今天就来为大家介绍如何使用 MicroK8s 快速部署集群,并演示使用服务网格来进行服务的访问控制

Demo

安装 MicroK8s

这里提供了 macOS 和 Linux 两种平台的安装,记得指定 MicroK8s 的版本为 1.25-strict

macOS

brew install multipass #安装 Multipassbrew install ubuntu/microk8s/microk8smicrok8s install --cpu 2 --mem 8 --disk 20 --channel=1.25-strict/stable
复制代码

Linux

sudo snap install microk8s --channel=1.25-strict/stable
复制代码

安装 osm-edge

osm-edge 成为 MicroK8s 的附加组件后,安装更加简单,可以通过 microk8s enable osm-edge 命令一键安装。

这里我们通过参数指定服务网格的名字 osm ,以及部署网格组件的命名空间 osm-system ,以及开启宽松流量策略模式(这种模式下,默认允许服务间的自由通信)。

export osm_namespace=osm-system export osm_mesh_name=osm 
microk8s enable osm-edge \ --mesh-name "$osm_mesh_name" \ --osm-namespace "$osm_namespace" \ --set=osm.enablePermissiveTrafficPolicy=true
复制代码

确认 osm-edge 的组件已启动并正常运行。

microk8s kubectl get pod -n osm-systemNAME                              READY   STATUS    RESTARTS   AGEosm-bootstrap-84d58db974-xzmv9    1/1     Running   0          3m20sosm-injector-64db5b67-csv4z       1/1     Running   0          3m20sosm-controller-76c674f9c7-2gctr   2/2     Running   0          3m20s
复制代码

部署示例应用

还是使用常见的 bookstore 应用作为示例。



创建命名空间。

microk8s kubectl create namespace bookstoremicrok8s kubectl create namespace bookbuyermicrok8s kubectl create namespace bookthiefmicrok8s kubectl create namespace bookwarehouse
复制代码

将刚创建的命名空间纳入服务网格管理(无需借助 osm CLI)。

microk8s kubectl annotate namespace bookstore openservicemesh.io/sidecar-injection=enabledmicrok8s kubectl label namespace bookstore openservicemesh.io/monitored-by=osmmicrok8s kubectl annotate namespace bookbuyer openservicemesh.io/sidecar-injection=enabledmicrok8s kubectl label namespace bookbuyer openservicemesh.io/monitored-by=osmmicrok8s kubectl annotate namespace bookthief openservicemesh.io/sidecar-injection=enabledmicrok8s kubectl label namespace bookthief openservicemesh.io/monitored-by=osmmicrok8s kubectl annotate namespace bookwarehouse openservicemesh.io/sidecar-injection=enabledmicrok8s kubectl label namespace bookwarehouse openservicemesh.io/monitored-by=osm
复制代码

应用中使用 mysql,需要用到持久化存储。执行下面的命令,添加 hostpath provisioner。

microk8s enable hostpath-storage
复制代码

部署应用

microk8s kubectl apply -f https://raw.githubusercontent.com/flomesh-io/osm-edge-docs/main/manifests/apps/bookbuyer.yamlmicrok8s kubectl apply -f https://raw.githubusercontent.com/flomesh-io/osm-edge-docs/main/manifests/apps/bookthief.yamlmicrok8s kubectl apply -f https://raw.githubusercontent.com/flomesh-io/osm-edge-docs/main/manifests/apps/bookstore.yamlmicrok8s kubectl apply -f https://raw.githubusercontent.com/flomesh-io/osm-edge-docs/main/manifests/apps/bookwarehouse.yamlmicrok8s kubectl apply -f https://raw.githubusercontent.com/flomesh-io/osm-edge-docs/main/manifests/apps/mysql.yaml
复制代码

通过端口转发,在浏览器中可以查看应用的运行。

microk8s kubectl port-forward deploy/bookbuyer 8080:14001 -n bookbuyer --address 0.0.0.0 &microk8s kubectl port-forward deploy/bookthief 8083:14001 -n bookthief --address 0.0.0.0 &microk8s kubectl port-forward deploy/bookstore 8084:14001 -n bookstore --address 0.0.0.0 &
复制代码

在浏览器中使用主机的 IP 地址来访问应用,比如我使用的主机地址 192.168.1.11

  • bookbuyer: http://192.168.1.11:8080

  • bookthief: http://192.168.1.11:8080

  • bookbookstore: http://192.168.1.11:8080

访问控制

由于开启了宽松流量模式,网格中的服务可以自由地互相访问,也因此 bookthief 可以不断地从 bookstore 中偷取书籍(bookthief 页面计数器不断增长)。

要防止书籍被偷,首先我们关闭宽松流量模式。执行下面的命令后,bookthief 和 bookbuyer 页面的计数器停止了增长。

microk8s kubectl patch meshconfig osm-mesh-config -n osm-system -p '{"spec":{"traffic":{"enablePermissiveTrafficPolicyMode":false}}}'  --type=mergemeshconfig.config.openservicemesh.io/osm-mesh-config patched
复制代码

为了保证正常的书籍购买,要对 bookbuyer 对 bookstore 的访问放行:

microk8s kubectl apply -f https://raw.githubusercontent.com/flomesh-io/osm-edge-docs/release-v1.1/manifests/access/traffic-access-v1.yamltraffictarget.access.smi-spec.io/bookstore createdhttproutegroup.specs.smi-spec.io/bookstore-service-routes createdtraffictarget.access.smi-spec.io/bookstore-access-bookwarehouse createdhttproutegroup.specs.smi-spec.io/bookwarehouse-service-routes createdtraffictarget.access.smi-spec.io/mysql createdtcproute.specs.smi-spec.io/mysql created
复制代码

此时,bookbuyer 页面的计数器恢复增长,bookthief 页面的计数器仍未恢复。

通过流量策略的配置,我们实现了网格中服务间的访问控制。

总结

通过这篇文章,我们一键安装了 Kubernetes 集群和服务网格 osm-edge,并通过示例应用来验证如何使用服务网格来限制服务间的通信。服务网格的功能还有很多,由于篇幅原因不一一展示,有兴趣的同学可以访问 osm-edge 官方文档了解更多。

虽然引入了 sidecar 容器来管理服务间的网络通信,但是对轻量级的服务网格来说,sidecar 占用的资源有限却依然保持高性能,非常适合大规模的远端和资源受限的边缘。对资源占用和延迟感兴趣的同学,可以阅读文档《边缘服务网格 osm-edge 数据平面基准测试》

发布于: 刚刚阅读数: 3
用户头像

Flomesh

关注

微信订阅号:flomesh 2022.04.07 加入

一站式云原生应用流量管理供应商 官网:https://flomesh.io

评论

发布
暂无评论
快速体验 MicroK8s 开箱即用的服务网格_Service Mesh 服务网格_Flomesh_InfoQ写作社区