当前官方暂时还没有使用docker-compose 运行kuma 的demo(太复杂没必要),但是做为一个本地的测试环境使用
docker-compose 运行下通用模式的kuma 还有比较有意义的,可以了解下通信的原理。

环境组件说明

kuma 在通用模式运行,需要以下几个组件:

  • kuma-cp
  • kuma-dp
  • pg(状态存储)
  • envoy (sidecar)
  • kumactl (可选,方便命令连接的)
  • 需要通过sidecart 访问的服务(使用官方的demo)

环境准备

  • docker-compose 文件
 
version: "3"
services:
    postgres:
      image: postgres
      ports:
      - "5432:5432"
      environment:
      - "POSTGRES_PASSWORD=dalong"
      - "POSTGRES_DB=kuma"
    kuma-cp: 
      image: kong-docker-kuma-docker.bintray.io/kuma-cp:0.1.1
      command: run --log-level=info
      environment:
      - "KUMA_STORE_TYPE=postgres"
      - "KUMA_STORE_POSTGRES_HOST=postgres"
      - "KUMA_BOOTSTRAP_SERVER_PARAMS_XDS_HOST=kuma-cp"
      - "KUMA_STORE_POSTGRES_PORT=5432"
      - "KUMA_STORE_POSTGRES_USER=postgres"
      - "KUMA_STORE_POSTGRES_PASSWORD=dalong"
      - "KUMA_STORE_POSTGRES_DB_NAME=kuma"
    kuma-dp-echo:
      build: ./
      image: dalongrong/kuma-tcp-echo
      volumes:
      - "./service.yaml:/opt/service.yaml"
      - "./config2:/tmp/kuma.io/envoy"
      environment:
      - "KUMA_DATAPLANE_ADMIN_PORT=9901"
      - "KUMA_CONTROL_PLANE_BOOTSTRAP_SERVER_URL=http://kuma-cp:5682"
      - "KUMA_DATAPLANE_MESH=default"
      - "KUMA_DATAPLANE_NAME=dp-echo-1"
      ports:
      - "8000:8000"
      - "10000:10000"
    kuma-dp-echo2:
      build: ./
      image: dalongrong/kuma-tcp-echo
      volumes:
      - "./service2.yaml:/opt/service.yaml"
      - "./config3:/tmp/kuma.io/envoy"
      environment:
      - "KUMA_DATAPLANE_ADMIN_PORT=9901"
      - "KUMA_CONTROL_PLANE_BOOTSTRAP_SERVER_URL=http://kuma-cp:5682"
      - "KUMA_DATAPLANE_MESH=default"
      - "KUMA_DATAPLANE_NAME=dp-echo-2"
      ports:
      - "8001:8000"
      - "10001:10000"
 
  • kuma-dp dockerfile
    因为在kuma-dp 实例中我们需要包含sidecar(eenvoy),服务,以及一个可选的kumactl,所以dockerfile
    如下:
 
FROM kong-docker-kuma-docker.bintray.io/kuma-dp:0.1.1
COPY kuma-tcp-echo /usr/bin/kuma-tcp-echo
COPY envoy /usr/bin/envoy
COPY kumactl /usr/bin/kumactl
RUN chmod +x /usr/bin/kuma-tcp-echo && chmod +x /usr/bin/envoy && chmod +x /usr/bin/kumactl
COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
COPY config /config
ENTRYPOINT [ "/entrypoint.sh" ]

kumactl 需要一个配置文件 (类似kubectl),用来指定kuma-cp 的地址,内容如下:

contexts:
- controlPlane: local
  name: local
controlPlanes:
- coordinates:
    apiServer:
      url: http://kuma-cp:5681
  name: local
currentContext: local
 
 

entrypoint 容器入口:
为了启动方便,我们在entrypoint 中进行数据面板实体的注册,以及启动数据控制面板(有先后顺序的)

 
#!/bin/sh
cat /config 
kumactl --config-file /config apply -f /opt/service.yaml
echo "run dp"
nohup kuma-tcp-echo & 
kuma-dp run --log-level=debug

数据面板实体格式:
type 必须为Dataplane 当前mesh 为default(应该是为了支持多租户的),name 必须唯一,tags 指定角色

type: Dataplane
mesh: default
name: dp-echo-1
networking:
  inbound:
  - interface: 0.0.0.0:10000:8000
    tags:
      service: echo
  • kuma-cp 以及kuma-dp 环境变量
    对于kuma-cp 以及kuma-dp 启动的时候需要包含一些配置
    kuma-cp 配置,主要是kuma-cp http 服务地址,xds 服务地址,对于通用模式状态存储的数据库配置,以及暴露的host 名称,我们可以通过环境
    变量以及配置文件的方式修改,当前不太好的地方是数据库的表需要自己创建,看到官方在进行data schema 命令的添加
 
- "KUMA_STORE_TYPE=postgres"
- "KUMA_STORE_POSTGRES_HOST=postgres"
- "KUMA_BOOTSTRAP_SERVER_PARAMS_XDS_HOST=kuma-cp"
- "KUMA_STORE_POSTGRES_PORT=5432"
- "KUMA_STORE_POSTGRES_USER=postgres"
- "KUMA_STORE_POSTGRES_PASSWORD=dalong"
- "KUMA_STORE_POSTGRES_DB_NAME=kuma"

kuma-dp, 需要配置数据面板实体,xds 服务地址.envoy admin 端口

- "KUMA_DATAPLANE_ADMIN_PORT=9901"
- "KUMA_CONTROL_PLANE_BOOTSTRAP_SERVER_URL=http://kuma-cp:5682"
- "KUMA_DATAPLANE_MESH=default"
- "KUMA_DATAPLANE_NAME=dp-echo-1"

启动&&测试

  • 启动数据库

    可通过docker-entrypoint-initdb.d进行数据库数据库

docker-compose up -d postgres

创建数据库

CREATE TABLE IF NOT EXISTS resources (
    name varchar(100) NOT NULL,
    namespace varchar(100) NOT NULL,
    mesh varchar(100) NOT NULL,
    type varchar(100) NOT NULL,
    version integer NOT NULL,
    spec text,
    PRIMARY KEY (name, namespace, mesh, type)
);
  • 启动控制面板
dcoker-compose up -d kuma-cp
  • 启动服务kuma-dp
docker-compose up -d kuma-dp-echo kuma-dp-echo2
  • 测试效果
    原始服访问:
curl  http://localhost:8000

效果:

curl http://localhost:8000
GET / HTTP/1.1
Host: localhost:10000
User-Agent: curl/7.54.0
Accept: */*

通过sidecar 访问的服务

curl http://localhost:10000

效果:

curl http://localhost:10000
GET / HTTP/1.1
Host: localhost:10000
User-Agent: curl/7.54.0
Accept: */*

数据库内容:

参考资料

https://kuma.io/docs/0.1.1/documentation/#dataplane-specification
https://kuma.io/install/0.1.1/
https://github.com/rongfengliang/kuma-service-mesh-docker-compose
https://github.com/Kong/kuma/blob/master/install/postgres/resource.sql

kuma docker-compose 环境试用的更多相关文章

  1. docker compose环境搭建

    概述 Docker Compose提供一个简单的基于YAML配置语言.用于描写叙述和组装多容器的分布式应用. 使用docker定义和执行复杂的应用.使用compose,能够在一个文件中,定义多容器的应 ...

  2. 附004.Docker Compose环境变量说明

    一 环境变量概述 Compose支持在docker-compose执行命令的文件夹中,名为.env的环境变量配置文件声明默认环境变量. 二 定义变量 2.1 语法规则 Compose建议env文件中的 ...

  3. 附003.Docker Compose命令详解

    一 Docker Compose命令格式 Usage: docker-compose [-f <arg>...] [options] [COMMAND] [ARGS...] docker- ...

  4. Docker Compose 引用环境变量

    在项目中,往往需要在 docker-compose.yml 文件中使用环境变量来控制不同的条件和使用场景.本文集中介绍 docker compose 引用环境变量的方式.说明:本文的演示环境为 ubu ...

  5. [phvia/dkc] Docker Compose 快速构建(LNMP+Node)运行环境

    快速构建(LNMP+Node)运行环境. dkc 在此作为 docker-compose 的缩写,你可以理解为 alias dkc=docker-compose 准备 安装 docker 选择1) 从 ...

  6. 利用Docker Compose快速搭建本地测试环境

    前言 Compose是一个定义和运行多个Docker应用的工具,用一个YAML(dockder-compose.yml)文件就能配置我们的应用.然后用一个简单命令就能启动所有的服务.Compose编排 ...

  7. 利用 Docker Compose 搭建 SpringBoot 运行环境(超详细步骤和分析)

    0.前言 相信点进来看这篇文章的同学们已经对 Docker Dompose 有一定的了解了,下面,我们拿最简单的例子来介绍如何使用 Docker Compose 来管理项目. 本文例子: 一个应用服务 ...

  8. Docker Compose 搭建 Redis Cluster 集群环境

    在前文<Docker 搭建 Redis Cluster 集群环境>中我已经教过大家如何搭建了,本文使用 Docker Compose 再带大家搭建一遍,其目的主要是为了让大家感受 Dock ...

  9. Docker Compose—简化复杂容器应用的利器

    Compose是用于定义和运行复杂Docker应用的工具.你可以在一个文件中定义一个多容器的应用,然后使用一条命令来启动你的应用,然后所有相关的操作都会被自动完成. 1. 安装Docker和Compo ...

  10. .NET遇上Docker - 使用Docker Compose组织Ngnix和.NETCore运行

    本文工具准备: Docker for Windows Visual Studio 2015 与 Visual Studio Tools for Docker 或 Visual Studio 2017 ...

随机推荐

  1. 什么是k8s

    •Kubernetes介绍 1.背景介绍 云计算飞速发展 - IaaS - PaaS - SaaS Docker技术突飞猛进 - 一次构建,到处运行 - 容器的快速轻量 - 完整的生态环境 2.什么是 ...

  2. ajax 执行成功以后返回的数据走的是error方法而不是success方法的问题

    今天在一个功能的时候发现写的ajax的方法执行后台代码成功后返回前台时执行的是error方法而不是success方法,代码如下 jQuery('#form').ajaxSubmit({ type: & ...

  3. #define宏作用

    预处理器的任务 简单来讲,预处理器的任务就是执行源代码中的预处理指令,并对源代码进行相应的处理.因此,从预处理指令的类型来讲,预处理器的任务包括如下的几个部分: 将其他文件包含到当前文件中. 定义宏, ...

  4. SQL语句及数据库优化

     1,统一SQL语句的写法 对于以下两句SQL语句,程序员认为是相同的,数据库查询优化器认为是不同的. 所以封装成复用方法,用标准模板来控制. select*from dual  select*Fro ...

  5. Beego学习笔记四:编写Model

    MVC实践一:编写模型 1>     打开mysql数据库,设计表的结构 <1>登录mysql数据库,如下 <2>这三个标注的参数皆有用,需要谨记. <3>创 ...

  6. JavaScript 数组(三)数组方法

    常用方法及案例参考这篇:数组对象及常用方法

  7. react 爬坑记录

    1.父子组件优化其一发生render条件:数据改变(state或者props改变),有时子组件会过多render.这时可在子组件里面的生命周期钩子里执行 shouldComponentUpdate(n ...

  8. Nginx学习(一)

    Nginx I/O模型 网络I/O 本质是socket读取 第一步:将数据从磁盘文件先加载至内核内存空间(暖冲区),等待数据准备完成,时间较长. 第二部:将数据从内核缓冲区复制到用户空间的进程的内存中 ...

  9. mysql字符串截取函数和日期函数

    注:mysql下标索引从1开始,并包含开始索引 1.left(str,len) index<=0,返回空 index>0,截取最左边len个字符 select ), ), ), )  结果 ...

  10. workman即时推送

    https://www.workerman.net/web-sender 下载源码解压后运行  start_for_win.bat  如果提示不成功,就把php路径配置到环境变量中去即可 运行后打开浏 ...