knowledge-base

我的知识库 / AWS / K8s 部署 Kong 服务

K8s 部署 Kong 服务

image-20200319105924013

本篇只涉及 Kong 服务在 K8s 集群的部署操作,不涉及概念知识。

提前准备

初始化数据库

使用 Postgres 作为 Kong 服务的后端数据库,我们需要提前做数据库的初始化,准备 Kong 服务需要的数据表等。这里使用 K8s-Job 来实现数据库的初始化工作。

kong-migrations-job.yaml

apiVersion: batch/v1
kind: Job
metadata:
  name: kong-migrations
  namespace: kong
spec:
  template:
    metadata:
      name: kong-migrations
    spec:
      containers:
        - command:
            - /bin/sh
            - -c
            - kong migrations bootstrap
          env:
            - name: KONG_PG_PASSWORD
              value: "kong"
            - name: KONG_PG_HOST
              value: "postgres/postgres"
            - name: KONG_PG_PORT
              value: "5432"
          image: kong:1.4
          name: kong-migrations
      initContainers:
        - command:
            - /bin/sh
            - -c
            - until nc -zv $KONG_PG_HOST $KONG_PG_PORT -w1; do echo 'waiting for db';
              sleep 1; done
          env:
            - name: KONG_PG_HOST
              value: "localhost:5432"
            - name: KONG_PG_PORT
              value: "5432"
          image: busybox
          name: wait-for-postgres
      restartPolicy: OnFailure

使用的是 kong 的镜像,这个镜像运行起来的容器里执行 kong migrations bootstrap 命令来完成 kong 数据库的初始化操作。

initContainers 容器的作用是保证 ping postgres 的网络可以连通,如果无法连通,不会执行初始化。

在操作机器上使用以下命令开始 kong 数据库的初始化:

kubectl apply -f kong-migrations-job.yaml 

如果 kong 数据库初始化成功,你可以在数据库中看到新出现的表

image-20200319113114554

K8s资源文件

kong-configmap.yaml

apiVersion: v1
data:
  servers.conf: |
    # Prometheus metrics server
    server {
        server_name kong_prometheus_exporter;
        listen 0.0.0.0:9542; # can be any other port as well
        access_log off;

        location /metrics {
            default_type text/plain;
            content_by_lua_block {
                 local prometheus = require "kong.plugins.prometheus.exporter"
                 prometheus:collect()
            }
        }

        location /nginx_status {
            internal;
            stub_status;
        }
    }
    # Health check server
    server {
        server_name kong_health_check;
        listen 0.0.0.0:9001; # can be any other port as well

        access_log off;
        location /health {
          return 200;
        }
    }
kind: ConfigMap
metadata:
  name: kong-server-blocks
  namespace: kong

使用 nginx 对外暴露 kong 指标数据的接口,通过这个接口,prometheus 可以抓取到 kong 服务指标数据。


« Gitlab & EKS

» K8s 部署 konga