文档章节

服务网格Istio管理面板-Naftis

openthings
 openthings
发布于 01/03 17:23
字数 1900
阅读 175
收藏 1

Naftis(https://github.com/xiaomi/naftis) 是一个基于 web 的 Istio dashboard,通过任务模板的方式来帮助用户更方便地执行 Istio 任务。 用户可以在 Naftis 中定义自己的任务模板,并填充变量来构造单个或多个构造任务实例,从而完成各种服务治理功能。

代码结构

.
├── bin                         # 存放编译好的 Go 二进制文件
├── config                      # 存放配置文件
│   ├── in-cluster.toml         # 在 Kubernetes 集群中启动的配置
│   └── in-local.toml           # 本地启动的配置
├── install                     # Helm Charts
│   └── helm
│       ├── mysql
│       └── naftis
├── src                         # 源码
│   ├── api                     # 后端 Go API 服务源码
│   │   ├── bootstrap           # 启动 Go API 服务相关参数包
│   │   ├── executor            # task 队列执行器
│   │   ├── handler             # HTTP handlers
│   │   ├── log                 # 基于 zap 封装的 log 包
│   │   ├── middleware          # HTTP 中间件
│   │   ├── model               # 全局通用 model
│   │   ├── router              # HTTP 路由
│   │   ├── service             # 封装好的服务
│   │   ├── storer              # db storer
│   │   ├── util                # 工具类包
│   │   ├── version             # 提供运行时的版本信息等显示的支持
│   │   ├── worker              # task worker
│   │   └── main.go             # Go API 入口
│   └── ui                      # 前端源码
│       ├── build               # Webpack 打包脚本
│       ├── src                 # 前端 js 源码
│       ├── package.json
│       ├── package-lock.json
│       ├── postcss.config.js
│       ├── README-CN.md
│       └── README.md
├── tool                        # Makefile 可能会用到的一些编译脚本
│   ├── img
│   ├── apppkg.sh
│   ├── build.sh
│   ├── cleanup.sh              # 清理 Naftis
│   ├── conn.sh
│   ├── genmanifest.go          # 生成 Kubernetes 部署清单
│   ├── gentmpl.go
│   ├── naftis.sql              # Naftis 数据迁移脚本
│   ├── naftis.conf             # Naftis Nginx 配置文件
│   └── version.sh
├── vendor                      # Go 依赖
├── Dockerfile.api              # 编译 Go API 镜像的 dockerfile
├── Dockerfile.ui               # 编译前端 UI 镜像的 dockerfile
├── Gopkg.lock                  # dep 版本锁定文件,由 dep 生成
├── Gopkg.toml                  # dep 版本约束文件,用户可编辑
├── LICENSE
├── Makefile                    # Makefile文件
├── mysql.yaml                  # Kubernetes MySQL 部署清单,由 Helm 生成
├── naftis.yaml                 # Kubernetes API 和 UI 部署清单,由 Helm 生成
├── README-CN.md
├── README.md
└── run                         # 本地快速启动脚本

功能

  • 内部集成了一些常用 dashboard
  • 可定制的任务模板支持
  • 支持回滚指定任务
  • 支持指定根服务节点的服务拓扑图
  • 提供查看 Istio 的 Services 和 Pod 的支持
  • 开箱即用,通过 Kubectl 相关指令即可快速部署
  • 支持 Istio 1.0

依赖

目前 Naftis 仅支持 Kubernetes,不支持其他容器调度平台。

  • Istio > 1.0
  • Kubernetes >= 1.9.0
  • HIUI >= 1.0.0

HIUI

Naftis 前端 UI 使用由小米前端组开源的 React 组件 HIUI 构建,参考:

快速开始

# 下载最新 release 文件和部署清单
wget -O - https://raw.githubusercontent.com/XiaoMi/naftis/master/tool/getlatest.sh | bash

# 在本地 Kubernetes 集群或 Minikuber 上
kubectl create namespace naftis && kubectl apply -n naftis -f mysql.yaml && kubectl apply -n naftis -f naftis.yaml

# 在各云服务商提供的 Kubernetes 集群上,比如 GKE、阿里云、AWS
kubectl create namespace naftis && kubectl apply -n naftis -f mysql-cloud.yaml && kubectl apply -n naftis -f naftis-cloud.yaml

# 通过端口转发的方式访问 Naftis
kubectl -n naftis port-forward $(kubectl -n naftis get pod -l app=naftis-ui -o jsonpath='{.items[0].metadata.name}') 8080:80 &

# 打开浏览器访问 http://localhost:8080,默认用户名和密码分别为 admin、admin。

详细的部署流程

Kubernetes 集群内运行

# 下载最新 release 文件和部署清单
wget -O - https://raw.githubusercontent.com/XiaoMi/naftis/master/tool/getlatest.sh | bash

# 创建 Naftis 命名空间
$ kubectl create namespace naftis

# 确认 Naftis 命名空间已创建
$ kubectl get namespace naftis
NAME           STATUS    AGE
naftis         Active    18m

# 部署 Naftis MySQL 服务(本地 Kuberenetes 集群)
$ kubectl apply -n naftis -f mysql.yaml
# 部署 Naftis MySQL 服务(云服务商提供的 Kuberenetes 集群)
$ kubectl apply -n naftis -f mysql-cloud.yaml

# 确认 MySQL 已部署
NAME                           READY     STATUS    RESTARTS   AGE
naftis-mysql-c78f99d6c-kblbq   0/1       Running   0          9s
naftis-mysql-test              1/1       Running   0          10s

# 部署 Naftis API 和 UI 服务
kubectl apply -n naftis -f naftis.yaml

# 确认 Naftis 所有的服务已经正确定义并正常运行中
kubectl get svc -n naftis
NAME           TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
naftis-api     ClusterIP      10.233.3.144    <none>        50000/TCP      7s
naftis-mysql   ClusterIP      10.233.57.230   <none>        3306/TCP       55s
naftis-ui      LoadBalancer   10.233.18.125   <pending>     80:31286/TCP   6s

kubectl get pod -n naftis
NAME                           READY     STATUS    RESTARTS   AGE
naftis-api-0                   1/2       Running   0          19s
naftis-mysql-c78f99d6c-kblbq   1/1       Running   0          1m
naftis-mysql-test              1/1       Running   0          1m
naftis-ui-69f7d75f47-4jzwz     1/1       Running   0          19s

# 端口转发访问 Naftis
kubectl -n naftis port-forward $(kubectl -n naftis get pod -l app=naftis-ui -o jsonpath='{.items[0].metadata.name}') 8080:80 &

# 打开浏览器,访问 http://localhost:8080 即可。默认用户名和密码分别为 admin、admin。

本地运行

数据移植

# 执行 sql 语句
mysql> source ./tool/naftis.sql;

# 将 in-local.toml 中的数据库的 DSN 替换成本地 MySQL 实例的 DSN。

启动 API 服务

  • Linux
make build && ./bin/naftis-api start -c config/in-local.toml -i=false
  • 或:
./run
  • Mac OS
GOOS=darwin GOARCH=amd64 make build && ./bin/naftis-api start -c config/in-local.toml -i=false
  • 或:
GOOS=darwin GOARCH=amd64 ./run

配置 Nginx 代理

cp tool/naftis.conf <your-nginx-conf-directory>/naftis.conf
# 酌情修改 naftis.conf 文件并 reload nginx

启动前端 Node 代理

cd src/ui
npm install
npm run dev

# 打开浏览器访问 http://localhost:5200。

预览

Dashboard

Dashboard 页面集成了一些常用的图表,比如请求成功率、4XX请求数量等。

服务管理

服务详情

服务详情页面可以查看查看已部署到 Kubernetes 中服务信息。

服务 Pod 和拓扑图

服务详情页面可以查看服务 Pod 和拓扑图等信息。

任务模板管理

任务模板列表

任务模板列表也可以查看已经添加好的任务模板卡片列表。

查看指定模板

点击“查看模板”可以查看指定模板信息。

新增模板

点击“新增模板”可以向系统中新增自定义模板。添加模板名称、模板简述、模板内容后, 点击 "Generate rows"按钮,Naftis 会解析模板内容,提取变量列表。

用户可以自行修改变量属性,包括变量注释、变量的表单元素类型、变量的数据元等。

注:默认提供了 HostNamespace 两个数据源,如果用户对某个变量指定了这两个数据源,则需要同时将变量的表单元素类型设置为 SELECT

创建任务

初始化变量值。

确认变量值。

提交创建任务的分布表单。

Istio 诊断

Istio 诊断页面可以查看 Istio Service 和 Pod 状态。

Docker 镜像

Naftis 的 API 和 UI 镜像已经发布到 Docker Hub 上,见 apiui

开发者指南

获取源码

go get github.com/xiaomi/naftis

配置环境变量

将下述环境变量添加到 ~/.profile。我们强烈推荐通过 autoenv 来配置环境变量。

# Change GOOS and GOARCH with your environment.
export GOOS="linux"   # or replace with "darwin", etc.
export GOARCH="amd64" # or replace with "386", etc.

# Change USER with your Docker Hub account for pulling and pushing custom docker container builds.
export USER="sevennt"
export HUB="docker.io/$USER"

如果你使用 autoenv,则输入 cd . 来使环境变量生效。

Go 依赖

我们目前使用 dep 管理依赖。

# 安装 dep
go get -u github.com/golang/dep
dep ensure -v # 安装 Go 依赖

代码风格

其他指令

make                # 编译所有 targets

make build          # 编译 Go 二进制文件、前端静态资源、Kubernetes 清单
make build.api      # 编译 Go 二进制文件
make build.ui       # 编译前端静态资源
make build.manifest # 编译 Kubernetes 清单

make fmt  # 格式化 Go 代码
make lint # lint Go 代码
make vet  # vet Go 代码
make test # 运行测试用例
make tar  # 打包成压缩文件

make docker     # 编译 docker 镜像
make docker.api # 编译后端 docker 镜像
make docker.ui  # 编译前端 docker 镜像
make push       # 把镜像推送到 Docker Hub

./bin/naftis-api -h      # 显示帮助信息
./bin/naftis-api version # 显示版本信息

helm template install/helm/naftis --name naftis --namespace naftis > naftis.yaml # 本地渲染 Kubernetes 清单

./tool/cleanup.sh # 清理已部署的 Naftis

架构

更多参考:

本文转载自:https://github.com/xiaomi/naftis

openthings
粉丝 322
博文 1138
码字总数 687611
作品 1
东城
架构师
私信 提问
小米正式开源 Istio 管理面板 Naftis

近年来服务网格(Service Mesh)已成为各大公司关注重点,各大公司纷纷开始调研 Service Mesh 相关架构。作为 Service Mesh 中的佼佼者, Istio 诞生之初就已吸引众多目光。 作为基础设施层,...

Newt0n
2018/10/25
11.1K
7
Istio 管理面板 - Naftis

Naftis 是一个基于 web 的 Istio dashboard,通过任务模板的方式来帮助用户更方便地执行 Istio 任务。 用户可以在 Naftis 中定义自己的任务模板,并填充变量来构造单个或多个构造任务实例,从...

Newt0n
2018/10/25
4.8K
0
服务网格中数据面板与控制面板的深入分析

服务网格:数据面板 VS 控制面板 近两年来,服务网格(service mesh)的思想越来越受欢迎,随着学习该技术的人数激增,我发现所有技术社区里都产生了大量关于如何比较不同工具间差异的问题。...

CSharpKit
2017/12/21
0
0
istio简介和基础组件原理(服务网格Service Mesh)

微服务对于每个功能的开发细化了,但是对与系统的管理复杂度增强了,尤其是网络流量的管理。 试想一下:黑名单,导流,加密,访问控制,流量监控,熔断,限速,收费功能 这种在网络层上的功能...

数据架构师
2018/11/27
0
0
阿里云Kubernetes Service Mesh实践进行时(1): Istio初体验

概述 Istio是一个用于连接/管理以及安全化微服务的开放平台,提供了一种简单的方式用于创建微服务网络,并提供负载均衡、服务间认证以及监控等能力,并且关键的一点是并不需要修改服务本身就...

osswangxining
2018/06/06
0
0

没有更多内容

加载失败,请刷新页面

加载更多

如何使用ssh工具便于远程管理

前几天亲眼经历了Linux服务器运维过程,眼看着别人熟练运用Linux管理工具,自个心里不是滋味,所以自己特意整理了一篇“专题”:使用ssh服务远程管理主机。 首先在使用ssh服务工具之前,先熟...

linux-tao
4分钟前
0
0
生存还是毁灭?一文读懂挖矿木马的战略战术

前言 比特币等虚拟货币在2019年迎来了久违的大幅上涨,从最低3000美元上涨至7月份的14000美元,涨幅达300%,巨大的金钱诱惑使得更多的黑产团伙加入了恶意挖矿的行列。阿里云安全团队通过对云...

阿里云官方博客
6分钟前
0
0
jQuery中的DOM多样操作

常用状态码及其含义: 404 没找到页面(not found) 403 禁止访问(forbidden) 500 内部服务器出错(internal service error) 200 一切正常(ok) 304 没有被修改(not modified) jQuery中的...

智简
7分钟前
0
0
初学者不会画男头像?男头像怎么画?

人物头像怎样画?男性头像怎样画?学习绘画难吗?怎样才干学好绘画?想必这些都是绘画初学者们经常在想的问题吧,就是不知道如何才干绘画好人物的头像,比如说男性的头像,男性的头像与女人的...

热爱画画的我
8分钟前
0
0
lopatkin俄大神精简中文系统Windows 10 Enterprise 2016 LTSB 14393.729 x64 ZH-CN PIPvm v2

Microsoft Windows 10 Enterprise 2016 LTSB 14393.729 x64 ZH-CN PIPvm v2 评分挺高的 出厂年份:2017 版本:Windows 10 Enterprise 2016 LTSB 14393.729 平台:x64 系统要求: CPU-1 gz R......

xiaogg
8分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部