在 DC/OS 集群安装

本文原文链接:https://docs.konghq.com/install/dcos/

可以使用以下步骤在Mesosphere DC/OS群集上配置Kong:

以下步骤使用AWS来配置DC/OS集群,并假设您具有DC/OSMarathonVIPMarathon-LB的基本知识。

  1. 初始设定

    下载或克隆以下存储库:

    1. $ git clone git@github.com:Kong/kong-dist-dcos.git
    2. $ cd kong-dist-dcos

    如果您已经配置了DC/OS群集,请跳到步骤3。

  2. 部署一个DC/OS集群

    遵循DC/OS AWS文档,部署将在其上配置Kong的DC / OS群集

    群集准备就绪后,可以使用DC/OS CLIDC/OS GUI部署Kong。

  3. 部署Marathon-LB

    我们将使用marathon-lb软件包来部署Marathon-LB来对群集的外部流量进行负载平衡,并使用VIP来对内部流量进行负载平衡:

    1. $ dcos package install marathon-lb
  4. 部署kong支持的数据库

    在部署Kong之前,您需要预配一个Cassandra或PostgreSQL实例。

    对于Cassandra,请使用cassandra软件包在DC/OS集群中部署3个Cassandra节点:

    1. $ dcos package install cassandra

    对于PostgreSQL,请使用具有以下选项的postgresql软件包:

    1. {
    2. "service": {
    3. "name": "postgresql"
    4. },
    5. "postgresql": {
    6. "cpus": 0.3,
    7. "mem": 512
    8. },
    9. "database": {
    10. "username": "kong",
    11. "password": "kong",
    12. "dbname": "kong"
    13. },
    14. "storage": {
    15. "host_volume": "/tmp",
    16. "pgdata": "pgdata",
    17. "persistence": {
    18. "enable": true,
    19. "volume_size": 512,
    20. "external": {
    21. "enable": false,
    22. "volume_name": "postgresql",
    23. "provider": "dvdi",
    24. "driver": "rexray"
    25. }
    26. }
    27. },
    28. "networking": {
    29. "port": 5432,
    30. "host_mode": false,
    31. "external_access": {
    32. "enable": false,
    33. "external_access_port": 15432
    34. }
    35. }
    36. }

    它将PostgreSQL配置如下:

    • username :此参数配置Kong数据库的用户名
    • password : 此参数配置Kong数据库的密码
    • dbname : 此参数配置kong数据库的名称
    • persistence : 此参数为PostgreSQL启用持久卷

      使用仓库中的postgres.json文件安装PostgreSQL:

      1. $ dcos package install postgresql --options=postgres.json
  5. 部署 Kong

    现在,我们有一个外部负载平衡器和Kong支持的数据库正在运行。使用Universe存储库中的kong程序包,使用以下选项部署Kong:

    1. {
    2. "service": {
    3. "name": "kong",
    4. "instances": 1,
    5. "cpus": 1,
    6. "mem": 512,
    7. "role": "*"
    8. },
    9. "configurations": {
    10. "log-level": "notice",
    11. "database": {
    12. "migrations": true,
    13. "use-cassandra": false
    14. },
    15. "postgres": {
    16. "host": "postgresql.marathon.l4lb.thisdcos.directory",
    17. "port": 5432,
    18. "database": "kong",
    19. "user": "kong",
    20. "password": "kong"
    21. },
    22. "cassandra": {
    23. "contact-points": "node-0.cassandra.mesos, node-1.cassandra.mesos, node-2.cassandra.mesos",
    24. "port": 9042,
    25. "keyspace": "kong"
    26. }
    27. },
    28. "networking": {
    29. "proxy": {
    30. "external-access": true,
    31. "vip-port": 8000,
    32. "vip-port-ssl": 8443,
    33. "virtual-host": "<vhost>",
    34. "https-redirect": true,
    35. "service-port": 10201
    36. },
    37. "admin": {
    38. "external-access": true,
    39. "vip-port": 8001,
    40. "vip-port-ssl": 8444,
    41. "https-redirect": false,
    42. "service-port": 10202
    43. }
    44. }
    45. }

    它对Kong的配置如下:

    • configurations.log_level:设置Kong的log_level配置
    • configurations.custom-envs:以空格分隔的Kong配置列表
    • configurations.database.use-cassandra:如果为true,则将Cassandra用作Kong数据库
    • configurations.database.migration:如果为true,则Kong将在启动期间进行迁移
    • configurations.postgres.host:PostgreSQL host
    • configurations.postgres.port:PostgreSQL 端口
    • configurations.postgres.database:PostgreSQL 数据库
    • configurations.postgres.user:PostgreSQL 用户名
    • configurations.postgres.password:PostgreSQL 密码
    • configurations.cassandra.contact-points:用逗号分隔的Cassandra联系人列表
    • configurations.cassandra.port:Cassandra监听查询的端口
    • configurations.cassandra.keyspace:在Cassandra中使用的keyspace。如果不存在,将被创建
    • networking.proxy.external-access:如果为true,则允许外部访问Kong的代理端口
    • networking.proxy.virtual-host:将Kong代理端口与Marathon-lb集成在一起的虚拟主机地址
    • networking.proxy.https-redirect:如果为true,则Marathon-lb将HTTP流量重定向到HTTPS。这需要设置“虚拟主机”
    • networking.proxy.service-port:用于从群集外部访问Kong的代理端口的端口号
    • networking.proxy.vip-port:用于内部与代理API通信的端口号。默认值为8000
    • networking.proxy.vip-port-ssl:用于内部与代理API进行安全通信的端口号。默认值为8443
    • networking.admin.external-access:如果为true,则允许外部访问Kong的管理端口
    • networking.admin.virtual-host:将Kong管理端口与Marathon-lb集成在一起的虚拟主机地址
    • networking.admin.https-redirect:如果为true,则Marathon-lb将HTTP流量重定向到HTTPS。这需要设置“虚拟主机”
    • networking.admin.service-port:用于从群集外部访问Kong的管理端口的端口号
    • networking.admin.vip-port:用于内部与Admin API通信的端口号。默认值为8001
    • networking.admin.vip-port-ssl:用于内部与Admin API进行安全通信的端口号。默认值为8444

      注意:根据您选择的数据存储区来调整上述配置。

      运行以下命令以安装Kong软件包:

      1. $ dcos package install kong --options=kong_postgres.json
  6. 验证部署

    要验证我们的Kong实例是否已启动并正在运行,可以使用dcos task命令:

    1. $ dcos task
    2. NAME HOST USER STATE ID
    3. kong 10.0.1.8 root R kong.af46c916-3b55-11e7-844e-52921ef4378d
    4. marathon-lb 10.0.4.42 root R marathon-lb.d65c3cc3-3b54-11e7-844e-52921ef4378d
    5. postgres 10.0.1.8 root R postgres.5b0a2635-3b55-11e7-844e-52921ef4378d
  7. 使用Kong

    现在已经安装了Kong,以测试配置,将SSH SSH到群集中的一个实例(例如主实例)中,然后尝试curl端点:

    Admin

    1. $ curl -i -X GET http://marathon-lb.marathon.mesos:10202
    2. HTTP/1.1 200 OK
    3. ..
    4. {..}

    Proxy

    1. $ curl -i -X GET http://marathon-lb.marathon.mesos:10201
    2. HTTP/1.1 404 Not Found
    3. ..
    4. {"message":"no API found with those values"}

    VHOST

    在此示例中,用于公开Kong的代理端口的公共DNS名称是mesos-tes-PublicSl-1TJB5U5K35XXT-591175086.us-east-1.elb.amazonaws.com

    注意:Kong在代理端口上返回404是有效的响应,因为尚未注册任何API。

  8. 卸载 Kong

    要卸载Kong,请运行以下命令:

    1. $ dcos package uninstall kong
  9. 例子

    在本示例中,我们创建了一个应用程序,该应用程序在端口8080上返回Hello world。使用kong-dist-dcos存储库中的my_app.json文件,将该应用程序部署在群集中,该群集将充当后端服务器来处理从Kong接收的请求:

    1. $ dcos marathon app add my_app.json

    在Kong上创建一个API:

    1. $ curl -i -X POST marathon-lb.marathon.mesos:10002/apis \
    2. --data "name=myapp" \
    3. --data "hosts=myapp.com" \
    4. --data "upstream_url=http://myapp.marathon.l4lb.thisdcos.directory:8080"
    5. HTTP/1.1 201 Created
    6. ...

    向API发出请求:

    1. $ curl -i -X GET marathon-lb.marathon.mesos:10001 \
    2. --header "Host:myapp.com"
    3. HTTP/1.1 200 OK
    4. ...
    5. Hello world