摸索:Istio 路由规则 Alpha v3

Istio 近期的版本中出现了一个新的 API 组:networking.istio.io/v1alpha3,应该会替代现有的config.istio.io/v1alpha2 API。新的 API 不管是结构上还是功能上、以及命名上,都有很大差异。这里使用一些简单例子,体验一下 Alpha 3 带来的变化。

注意:正常情况下 istioctl 和 kubectl 都可以用来操作这些对象,但是 kubectl 缺乏验证功能,因此调试阶段使用 istioctl 会更方便一些。

Kubernetes 中用 Sidecar 为应用添加 Oauth 功能

Tags: 

Kubernetes 的 Pod 中可以同时运行共享网络栈的多个容器,使得 Sidecar 这种服务协作方式更加易于实施。这里我们就使用 Sidecar 方式,将 Keycloak 集成到 httpbin 服务上去,为没有认证的 httpbin 服务添加认证功能。

概要

Keycloak(链接 1) 是 JBoss 的一个认证服务软件,使用代理的方式,为其他应用提供认证能力,除了本文说到的 Oauth 之外,还提供二次认证、LDAP 等丰富的相关功能。

在 Kubernetes 上部署 Keycloak 服务,对其进行初始化,建立用户和认证系统,然后将 Keycloak-Proxy 和 Httpbin 集成在同一个 Pod 中进行部署运行,测试集成效果。

集成后的访问路径如图所示: Keycloak flow

Kubeadm 离线安装器 1.10

项目地址:https://github.com/fleeto/kubeadm-offline-installer

更新内容

  • 升级到了 Kubernetes 1.10。
  • 使用 CoreDNS 代替了原来的 KubeDNS。
  • 升级 Calico 网络插件为 3.0.4 版。

仅在 centos 7 minimal 测试通过。

Redhat 提供 Istio 在线交互式教学

Redhat 新近为用户提供了 Istio 的交互式学习工具,基于 Openshift 和最新的 Istio 0.6,试用了一下,主要有三个方面让我非常满意:

  1. 无需注册即可使用。
  2. 不受国内网络限制。
  3. 精心调校的示例应用和相关规则。

以上优点让这一工具的运行非常流畅,能够完整、直观并快速的为用户提供一个对于 Istio 的第一印象。下面用著名的老大难问题——断路器的课程,来看看这一教学工具的好处。

首先进入系列教程的首页。页面上排布了一系列的 Service Mesh 相关教程,分别是一个直通教程,外加八个 Workshop 环节,这里我们用第七个,也就是断路器的 Workshop 来看看这一教程的使用过程。

启动服务

进入首页之后,点击醒目的红色按钮,进入场景。会看到三栏式的页面:

istio 0.5.0 新特性:流量镜像

在类似 Dark launch 的测试、发布过程中,流量复制是个非常有用的功能,istio 0.5.0 的更新,带来了一个新的路由相关特性:流量镜像。

这一场景中,我们会将正常的流量进行复制,将复制出来的流量分发给待上线的应用(V2),使用实际流量对新版本应用进行测试;而现有客户端则仅会感知到单一版本(V1)的存在。

下面做个小实验来进行验证。

条件

基于 Kubernetes 运行的 Istio 0.5.0 版本部署。

部署

源码见后。

nginx:stabel-alpine镜像,生成v1v2两个版本的 Deployment,以及一个target服务:

ChatBot:在 Slack 中使用监控和告警

前面文章中我们使用 Errbot 通过 Kubernetes API 在 Slack 中进行 Kubernetes 查询。这种方式很局限。毕竟拉更多组件下水,写更多代码才是大势所趋LOL。本文以 Istio 中的响应时间监控为例,看看 Errbot 和 Prometheus 的互动。

前提

  • Istio
  • Prometheus
  • 公网部署
  • 接入 Slack 的 Errbot
  • Errbot 开放 3141 端口,能够被 Alertmanager 使用。

注意:

在 Azure 上运行 Istio 的注意事项

Tags: 
  • ACS Engine: v0.12.4
  • Istio: v0.5.0
  • Kubernetes: v1.8.7

在 Istio 注入之后,生成的 Init 容器中会有 RunAs 的 SecurityContext,而 ACS Engine 的缺省 admission 包含了SecurityContextDeny,会拒绝这一选项,造成 Istio Workload 无法运行,

解决方法很简单,只要在定义文件中修改 api server 配置:

Errbot 入门(3)

Tags: 

Errbot 入门(3)

通过 Errbot 控制 Kubernetes

前面两篇分别讲了 Errbot 的简单启动和 Slack 的集成。这一篇做个结尾,用 Errbot 来查询 Kubernetes 的状态。

之前使用的 Docker 镜像中,已经集成了 Kubernetes 的 Python 客户端,所以这里只要在 Python 中引用,就可以操作了。

这里实现两个功能,第一个是列出 kubeconfig 文件中的 context,第二个是列出集群 Node 的健康状况。

准备工作

首先在 Errbot 的加载卷目录中新建目录kubeconfig,并在其中放置一个可用的 kubeconfig 文件。例如:

/usr/local/var/volumes/errbot/kubeconfig/config

Errbot 入门(2)

Tags: 

上一篇中,大致理解了一点 Errbot 的基础指令,这里尝试把 Errbot 接入到聊天室之中。

Slack 接入

  • 首先去 Slack 网站 注册一个机器人。
  • 注册完成后,会得到一个 Token。

回到 Errbot 的配置文件,下面是一个样例。这里我们设置机器人接收 "@dustise" 这一 ID 的管理,BOT_IDENTITY 写入我们刚刚创建的 Bot 账号的 Token:

Errbot 入门(1)

简介

ChatBot,也就是聊天机器人,是近期偷偷热起来的东西之一,个人觉得原因很简单——太多系统需要运维了。

使用 Grafana 可以将各种监控、日志的东西进行跟踪,在同一个 Dashboard 进行展示,但是缺点也比较明显:

  1. Dashboard 需要定制,不够灵活,难于满足突发的个性化需要。
  2. 信息是单向流动的,无法进行远程干预。
  3. 插件开发需要兼顾前后端,前端漂亮的界面对运维来说,并非必要。

聊天机器人简单说来是一个需要很多二次开发的控制台,这个控制台的不同之处在于,可以和多种聊天室之类的东西进行集成,另外部分产品提供了认证、授权等功能;另外还有不少开源插件,用来同其他系统进行集成。称为机器人,应该说是一个历史遗留,跟 AI 大概有半毛钱的关系吧。

目前最流行的同类产品大概是 Github 的 Hubot,不过个人爱好问题,还是选择了 Python 的 Errbot。官方网站 http://errbot.io/ ,大致功能:

页面