【问题标题】:How to run Kong API Gateway using docker containers?如何使用 docker 容器运行 Kong API 网关?
【发布时间】:2017-02-13 11:26:11
【问题描述】:

我是 Kong API Gateway 的新手,目前正在尝试运行一个以 PostgreSQL 作为我的数据库容器的 Kong 容器。

我怎样才能做到这一点?

【问题讨论】:

    标签: docker kong


    【解决方案1】:

    1.启动您的数据库:

     $ docker run -d --name kong-database \
                      -p 5432:5432 \
                      -e "POSTGRES_USER=kong" \
                      -e "POSTGRES_DB=kong" \
                      postgres:9.4
    

    2。启动金刚:

    启动一个 Kong 容器并将其链接到您的数据库容器,使用 postgres 配置 KONG_DATABASE 环境变量。

    $ docker run -d --name kong \
                  --link kong-database:kong-database \
                  -e "KONG_DATABASE=postgres" \
                  -e "KONG_PG_HOST=kong-database" \
                  -p 8000:8000 \
                  -p 8443:8443 \
                  -p 8001:8001 \
                  -p 7946:7946 \
                  -p 7946:7946/udp \
                  kong
    

    3.验证Kong是否正在运行:

    $ curl http://127.0.0.1:8001
    

    【讨论】:

    • 有没有人成功地将它引入 docker-compose.yml 文件并同时解决了 kong-database 在 kong 想要连接到数据库时尚未准备好的问题?跨度>
    • @StefanWalther 我仍在寻找在 docker-compose.yml 中实现上述支持堆栈部署的正确方法。
    【解决方案2】:

    您可以关注Kong installation guide。它按预期对我有用。

    第一步:启动 Postgres 容器

    docker run -d --name kong-database \
              -p 5432:5432 \
              -e "POSTGRES_USER=kong" \
              -e "POSTGRES_DB=kong" \
              postgres:9.5
    

    第二步:迁移数据库

    docker run --rm \
    --link kong-database:kong-database \
    -e "KONG_DATABASE=postgres" \
    -e "KONG_PG_HOST=kong-database" \
    -e "KONG_CASSANDRA_CONTACT_POINTS=kong-database" \
    kong:latest kong migrations up
    

    第 3 步:启动 Kong

    docker run -d --name kong \
    --link kong-database:kong-database \
    -e "KONG_DATABASE=postgres" \
    -e "KONG_PG_HOST=kong-database" \
    -e "KONG_CASSANDRA_CONTACT_POINTS=kong-database" \
    -e "KONG_PROXY_ACCESS_LOG=/dev/stdout" \
    -e "KONG_ADMIN_ACCESS_LOG=/dev/stdout" \
    -e "KONG_PROXY_ERROR_LOG=/dev/stderr" \
    -e "KONG_ADMIN_ERROR_LOG=/dev/stderr" \
    -e "KONG_ADMIN_LISTEN=0.0.0.0:8001" \
    -e "KONG_ADMIN_LISTEN_SSL=0.0.0.0:8444" \
    -p 8000:8000 \
    -p 8443:8443 \
    -p 8001:8001 \
    -p 8444:8444 \
    kong:latest
    

    第 4 步:验证

    curl -i http://localhost:8001/
    

    【讨论】:

      【解决方案3】:

      回答@StefanWalther 的问题,这里有一个如何使用 docker-compose 的示例:

      version: "2.1"
      services:
        kong:
          image: kong:latest
          depends_on:
            kong-database:
              condition: service_healthy
          healthcheck:
            test:
              - CMD
              - nc
              - -z
              - localhost
              - "8443"
            retries: 10
          links:
            - kong-database:kong-database
          command: 
            - "kong"
            - "start"
            - "--vv"
          environment:
            - KONG_DATABASE=cassandra
            - KONG_CASSANDRA_CONTACT_POINTS=kong-database
            - KONG_ADMIN_LISTEN=0.0.0.0:8001
            - KONG_ADMIN_LISTEN_SSL=0.0.0.0:8444
            - KONG_NGINX_DAEMON=off
          ports:
            - "443:8443"
            - "8001:8001"
          restart: always
          network_mode: "bridge"
        kong-database:
          image: cassandra:3
          healthcheck:
            test:
              - "CMD-SHELL"
              - "[ $$(nodetool statusgossip) = running ]"
          volumes:
            - ~/kong-database/cassandra:/var/lib/cassandra
          expose:
            - "9042"
          restart: always
          network_mode: "bridge"
      

      另外,您可以添加 kongfig 来重新配置实例:

        kong-configurer:
          image: mashupmill/kongfig
          depends_on:
            kong:
              condition: service_healthy
          links:
            - kong:kong
          volumes:
            - ~/config.yml:/config.yml:ro
          command: --path /config.yml --host kong:8001
          network_mode: "bridge"
      

      您可以转储配置以在最后一个容器中使用:

      kongfig dump --host localhost:8001 > ~/config.yml
      

      更多关于 Kongfig 的信息,here

      干杯。

      【讨论】:

        【解决方案4】:

        你检查了以下 repo 吗?

        https://github.com/Mashape/docker-kong

        【讨论】:

          【解决方案5】:

          这是我自己的 docker compose,它运行良好(来自 kong 在 github 上的 docker 项目,我使用了 kong-oidc,你可以选择你喜欢的任何版本)。

          kong:
              image: kong:1.3.0-alpine-oidc
              container_name: kong
              depends_on:
                - kong-db
              healthcheck:
                test: ["CMD", "kong", "health"]
                interval: 10s
                timeout: 10s
                retries: 10
              restart: on-failure
              ports:
                - "8000:8000" # Listener
                - "8001:8001" # Admin API
                - "8443:8443" # Listener  (SSL)
                - "8444:8444" # Admin API (SSL)
              environment:
                KONG_DATABASE:         postgres
                KONG_PG_HOST:          kong-db
                KONG_PG_PORT:          5432
                KONG_PG_DATABASE:      api-gw
                KONG_PROXY_ACCESS_LOG: /dev/stdout
                KONG_ADMIN_ACCESS_LOG: /dev/stdout
                KONG_PROXY_ERROR_LOG:  /dev/stderr
                KONG_ADMIN_ERROR_LOG:  /dev/stderr
                KONG_PROXY_LISTEN:     0.0.0.0:8000, 0.0.0.0:8443 ssl
                KONG_ADMIN_LISTEN:     0.0.0.0:8001, 0.0.0.0:8444 ssl
                KONG_PLUGINS:          bundled,oidc
                KONG_LOG_LEVEL:        debug
          
            kong-migrations:
              image: kong:1.3.0-alpine-oidc
              command: kong migrations bootstrap
              container_name: kong-migrations
              depends_on:
                - kong-db
              environment:
                KONG_DATABASE: postgres
                KONG_PG_DATABASE: api-gw
                KONG_PG_HOST: kong-db
                KONG_PG_PASSWORD:
                KONG_PG_USER: kong
              links:
                - kong-db:kong-db
              restart: on-failure
          
            kong-migrations-up:
              image: kong:1.3.0-alpine-oidc
              container_name: kong-migrations-up
              command: kong migrations up && kong migrations finish
              depends_on:
                - kong-db
              environment:
                KONG_DATABASE: postgres
                KONG_PG_DATABASE: api-gw
                KONG_PG_HOST: kong-db
                KONG_PG_PASSWORD:
                KONG_PG_USER: kong
              links:
                - kong-db:kong-db
              restart: on-failure

          【讨论】:

            【解决方案6】:

            2020 年更新

            1. 创建桥接网络,让容器可以互相访问
            docker network create my-net
            
            1. 启动kong-database容器
            docker run -d --name kong-database --network my-net  -p 5432:5432  -e "POSTGRES_USER=kong" -e "POSTGRES_HOST_AUTH_METHOD=trust" -e "POSTGRES_DB=kong"  postgres:alpine
            
            1. 运行临时容器为 kong-database 初始化数据
            docker run --rm \
                --network my-net \
                -e "KONG_DATABASE=postgres" \
                -e "KONG_PG_HOST=kong-database" \
                kong:latest kong migrations bootstrap
            
            1. 运行kong容器
            docker run -d --name kong \
                --network my-net \
                -e "KONG_DATABASE=postgres" \
                -e "KONG_PG_HOST=kong-database" \
                -e "KONG_PROXY_ACCESS_LOG=/dev/stdout" \
                -e "KONG_ADMIN_ACCESS_LOG=/dev/stdout" \
                -e "KONG_PROXY_ERROR_LOG=/dev/stderr" \
                -e "KONG_ADMIN_ERROR_LOG=/dev/stderr" \
                -e "KONG_ADMIN_LISTEN=0.0.0.0:8001" \
                -e "KONG_ADMIN_LISTEN_SSL=0.0.0.0:8444" \
                -p 8000:8000 \
                -p 8443:8443 \
                -p 8001:8001 \
                -p 8444:8444 \
                kong:latest
            
            1. 验证
            curl http://127.0.0.1:8001
            

            【讨论】:

              猜你喜欢
              • 2019-02-08
              • 2019-05-19
              • 2020-04-16
              • 1970-01-01
              • 1970-01-01
              • 2017-12-10
              • 2019-05-31
              • 2019-10-26
              • 2020-08-25
              相关资源
              最近更新 更多