Kong现在已经支持在K8S内做为Kubernetes Ingress Controller,Kong直接与Kubernetes生命周期相关联。随着应用程序的部署和新服务的创建,Kong将自动进行实时配置,为这些服务提供流量

PostgreSQL安装

Kong可以使用pgsql做为数据存储,这边使用helm安装pgsql,具体请参考上篇文章:使用helm安装PostgreSQL。

准备value.yaml

chart:https://github.com/helm/charts/tree/master/stable/kong 使用helm安装Kong,包含两个Deployment,一个是Kong的proxy和admin,一个是controller,实时监控刷新ingress信息。

value文件配置env.database为postgres,并配置前面安装好的pgsql信息,Kong的proxy和admin管理api接口可以采用nodeport、ingress等方式暴露,因为准备使用Konga进行管理,同一个集群admin使用clusterip即可,内部分采用http,需要修改livenessProbe和readinessProbe的协议。

# cat value.yaml
image:
  repository: kong
  tag: 1.2
  pullPolicy: IfNotPresent
postgresql:
  enabled: false  #使用已经安装好的pgsql
env:
  database: postgres
  pg_user: postgres
  pg_database: kong
  pg_password: sssssssss
  pg_host: postgre-postgresql-headless.databases.svc.cluster.local  #pgsql的host地址
  pg_port: 5432
admin:
  type: ClusterIP      #admin使用clusterip的方式暴露
  servicePort: 80
  containerPort: 8444
  useTLS: false       #内部不需要https,直接http即可
readinessProbe:
  httpGet:
    path: "/status"
    port: admin
    scheme: HTTP
livenessProbe:
  httpGet:
    path: "/status"
    port: admin
    scheme: HTTP

#helm install -n kong --namespace=kong -f value.yaml  stable/kong
安装konga管理界面

Konga是一个专门为kong管理的UI,K8S内部部署的yaml文件如下,konga的ingress暴露就可以直接使用kong,ingress的class如下:kubernetes.io/ingress.class: kong

# cat konga-deployment.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: konga
  namespace: kong
spec:
  replicas: 1
  template:
    metadata:
      labels:
        name: konga
        app: konga
    spec:
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: apps.k8s.icjl/devops
                operator: Exists
      tolerations:
          - key: "test"
            operator: "Equal"
            value: "k8s-200"
            effect: "NoSchedule"
      containers:
      - name: konga
        image: pantsel/konga
        env:
        - name: DB_ADAPTER
          value: postgres
        - name: DB_HOST
          value: postgre-postgresql-headless.databases.svc.cluster.local
        - name: DB_USER
          value: postgres
        - name: DB_PASSWORD
          value: ozOIGT4hUW
        - name: DB_DATABASE
          value: konga
        - name: TOKEN_SECRET
          value: kongadmin
        ports:
        - containerPort: 1337
          protocol: TCP
---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: konga
  name: konga-svc
  namespace: kong
spec:
  ports:
    - protocol: TCP
      port: 80
      targetPort: 1337
  selector:
    app: konga
---
kind: Ingress
apiVersion: extensions/v1beta1
metadata:
  annotations:
    kubernetes.io/ingress.class: nginx
  name: konga-ingress
  namespace: kong
spec:
  rules:
  - host: konga.hiningmeng.cn
    http:
      paths:
      - backend:
          serviceName: konga-svc
          servicePort: 80
        path: /

安装好konga之后,配置管理员用户,进入首页配置Connections信息,这里可以直接使用kong-admin的service地址: http://kong-kong-admin.kong.svc.cluster.local 配置完成就可以使用了。

可以看到Routes等信息已经自动添加完成