当前官方暂时还没有使用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

最新文章

  1. Web jquery表格组件 JQGrid 的使用 - 11.问题研究
  2. Web前端之CSS_day3-4
  3. linux 文件目录
  4. Linux驱动设计—— 内核模块(一)
  5. C#中Image , Bitmap 和 BitmapData
  6. C# Debug与release之间的一些小差异
  7. HashMap的工作原理(转)
  8. Dynamics CRM2016 Web API之获取查找字段的text及选项集的text
  9. windows10 右键 manage 没反应
  10. php 跨域请求
  11. 《Apache Kafka实战》读书笔记-调优Kafka集群
  12. Ajax替换局部DIV层
  13. Web、OAuth2/SSO相关拾遗
  14. 讲一讲Servlet的生命周期
  15. IBM研究院找到度量安全性方法:容器与虚拟机,谁更安全?
  16. 不知道如何处理的Windows Phone异常
  17. BZOJ2140: 稳定婚姻(tarjan解决稳定婚姻问题)
  18. VC6完整项目代码升级到VS2010
  19. 裸的lcs
  20. oringin 画图

热门文章

  1. npm是干什么的(转)
  2. inux centos7下源码 tar安装5.7.26详解
  3. RocketMQ Release Note(RocketMQ升级日志译文)
  4. mysql 中的日期格式。date_format( ) 转换格式
  5. 关于VS2019使用Git时遇到的Bug
  6. Spring Security实现OAuth2.0授权服务 - 进阶版
  7. dubbo循序渐进 - yml配置
  8. js获取浏览器的缩放状态,浏览器右上角的百分比缩放后的状态
  9. 基于JPA的分页/排序实现
  10. Android源码分析(三)-----系统框架设计思想