当前官方暂时还没有使用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. python selenium爬虫工具

    今天seo的同事需要一个简单的爬虫工具, 根据一个url地址,抓取改页面的a连接,然后进入a连接里面的页面再次抓取a连接 1.需要一个全局的set([])集合来保存抓取的url地址 2.由于现在单页面 ...

  2. JAAS configuration for Kafka clients

    Clients may configure JAAS using the client configuration property sasl.jaas.config or using the sta ...

  3. fail fast和fail safe策略

    优先考虑出现异常的场景,当程序出现异常的时候,直接抛出异常,随后程序终止 import java.util.ArrayList; import java.util.Collections; impor ...

  4. EF Core 迁移整理

    创建迁移 PowerShell Add-Migration InitialCreate 多数据源 Add-Migration InitialCreate -Context MyDbContext -O ...

  5. 使用httpClient 调用get,Post接口

    1.httpClient 调用get接口 private async Task<IList<(int columnId, string columnName)>> GetFun ...

  6. Google Chrome 浏览器JS无法更新解决办法

    JS无法更新原因: 浏览器为了加载快,默认是按照自定规则更新缓存,非实时更新. 我们在开发的时候,JS变动很快,需要即时让浏览器加载最新文件,也就是禁用浏览器缓存 (1)使用F12进入开发者模式,找到 ...

  7. Java自学-操作符 算数操作符

    Java的算数操作符 算数操作符 基本的有: + - * / % 自增 自减 ++ -- 基本的加 减 乘 除: public class HelloWorld { public static voi ...

  8. Ueditor 关于视频上传相关问题

      !!!每次改动后记得,清除一下浏览器缓存再试 !!!   4点: 1.修复编辑时视频不能预览问题: 2.插入视频的时候.在预览的窗口提示 “输入的视频地址有误,请检查后再试!” 3.ueditor ...

  9. JavaScript 数组(一)数组基础

    一.数组 1.概述 数组 就是将多个元素按一定顺序排放到一个集合中,那么这个集合称之为数组. 数组 也是一种数据类型,属于复杂数据类型(Object). 2.特点 存放的元素有序的. 可以存放不同的数 ...

  10. RabbitMQ启动出现的问题与解决办法

    问题1 使用命令启动 service rabbitmq-server start 报错如下: Starting rabbitmq-server (via systemctl): Job for rab ...