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

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

MicroK8s

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

osm-edge

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

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

Demo

安装 MicroK8s

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

macOS

brew install multipass #安装 Multipass
brew install ubuntu/microk8s/microk8s
microk8s 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-system
NAME                              READY   STATUS    RESTARTS   AGE
osm-bootstrap-84d58db974-xzmv9    1/1     Running   0          3m20s
osm-injector-64db5b67-csv4z       1/1     Running   0          3m20s
osm-controller-76c674f9c7-2gctr   2/2     Running   0          3m20s

部署示例应用

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

快速体验 MicroK8s 开箱即用的服务网格
https://atbug.oss-cn-hangzhou.aliyuncs.com/2022/08/02/16594365606736.jpg

创建命名空间。

microk8s kubectl create namespace bookstore
microk8s kubectl create namespace bookbuyer
microk8s kubectl create namespace bookthief
microk8s kubectl create namespace bookwarehouse

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

microk8s kubectl annotate namespace bookstore openservicemesh.io/sidecar-injection=enabled
microk8s kubectl label namespace bookstore openservicemesh.io/monitored-by=osm
microk8s kubectl annotate namespace bookbuyer openservicemesh.io/sidecar-injection=enabled
microk8s kubectl label namespace bookbuyer openservicemesh.io/monitored-by=osm
microk8s kubectl annotate namespace bookthief openservicemesh.io/sidecar-injection=enabled
microk8s kubectl label namespace bookthief openservicemesh.io/monitored-by=osm
microk8s kubectl annotate namespace bookwarehouse openservicemesh.io/sidecar-injection=enabled
microk8s 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.yaml
microk8s kubectl apply -f https://raw.githubusercontent.com/flomesh-io/osm-edge-docs/main/manifests/apps/bookthief.yaml
microk8s kubectl apply -f https://raw.githubusercontent.com/flomesh-io/osm-edge-docs/main/manifests/apps/bookstore.yaml
microk8s kubectl apply -f https://raw.githubusercontent.com/flomesh-io/osm-edge-docs/main/manifests/apps/bookwarehouse.yaml
microk8s 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=merge
meshconfig.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.yaml
traffictarget.access.smi-spec.io/bookstore created
httproutegroup.specs.smi-spec.io/bookstore-service-routes created
traffictarget.access.smi-spec.io/bookstore-access-bookwarehouse created
httproutegroup.specs.smi-spec.io/bookwarehouse-service-routes created
traffictarget.access.smi-spec.io/mysql created
tcproute.specs.smi-spec.io/mysql created

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

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

总结

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

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

引用链接

[1] osm-edge: https://github.com/flomesh-io/osm-edge
[2] osm: https://github.com/openservicemesh/osm
[3] Pipy: https://github.com/flomesh-io/pipy
[4] osm-edge 官方文档: https://osm-edge-docs.flomesh.io


原文始发于微信公众号(Flomesh):快速体验 MicroK8s 开箱即用的服务网格

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/59545.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!