Janrs.com | 杨建勇
Janrs.com | 杨建勇

k8s部署kong网关

[!TIP]
记录安装网关工具kong以及可视化管理工具konga
并使用postgresql作为kong的数据库,并且把postgresql挂载到nfs

注意:konga不能使用最新版的postgresql,根据网上多人配置,使用的是9.6版本

本次教程所有涉及到的镜像都我个人的阿里镜像仓库。按照本教程需要替换成自己的或者公用的。

转载请注明出处:https://janrs.com


k8s 部署 kong 网关

[!NOTE]
前提: 安装kong之前先安装nfs服务,教程地址:(https://janrs.com/?p=79)

1.创建命名空间

先创建好命名空间,后续的部署都是部署到该命名空间下


kubectl create ns kong

2.部署postgresql

2-1.部署postgresql deployment

创建postgres-v9.6-deploy.yaml

vim postgres-v9.6-deploy.yaml

添加内容如下

[!NOTE]
下面的创建deployment我使用的是自己的阿里镜像仓库,需要换成自己的
创建deployment已经指定了nfs挂载的地址,需要预先创建好并且设置777权限

apiVersion: apps/v1
kind: Deployment
metadata:
  name: postgresql
  namespace: kong
spec:
  replicas: 1
  selector:
    matchLabels:
      app: postgresql
  template:
    metadata:
      labels:
        app: postgresql
    spec:
      imagePullSecrets:
        - name: aliimagesecret #指定密钥
      containers:
      - name: postgresql
        image: registry.cn-shenzhen.aliyuncs.com/yjy_k8s/kong-postgres:v9.6 #换成自己的镜像地址
        imagePullPolicy: IfNotPresent

        env:
        - name: POSTGRES_USER
          value: "kong"
        - name: POSTGRES_DB
          value: "kong"
        - name: POSTGRES_PASSWORD
          value: "kong"

        ports:
        - containerPort: 5432
          protocol: TCP
          name: postgresql-port

        volumeMounts:
        - name: postgresql-db-volume #跟下面的对应
          readOnly: false
          mountPath: /var/lib/postgresql/data

      volumes:
        - name: postgresql-db-volume #跟上面的volumeMounts对应,不一样会导致错误
          nfs:
            path: /nfs/data/kong/postgresql-v12.12 #path要预先创建好并且设置777的权限
            server: 172.31.235.112 #此处地址改为自己的

执行创建

[!NOTE]
-n kong 参数指定命名空间

kubectl apply -f postgres-svc.yaml -n kong

查看创建结果

kubectl get pods -n kong

显示

NAME                          READY   STATUS    RESTARTS   AGE
postgresql-856d6fbc6f-vpltq   1/1     Running   0          13m

2-2.创建postgresql service

创建postgres-svc-v12.12.yaml

vim postgres-svc-v9.6.yaml

添加内容如下

apiVersion: v1
kind: Service
metadata:
  name: postgresql
  namespace: kong
  labels:
    app: postgresql
spec:
  ports:
  - name: postgresql
    port: 5432
    protocol: TCP
  selector:
    app: postgresql

执行创建

kubectl apply -f postgresql-svc-v9.6.yaml -n kong

查看创建结果

kubectl get service -n kong

显示

NAME         TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)    AGE
postgresql   ClusterIP   10.96.134.61   <none>        5432/TCP   20m

2-3.初始化kong数据库

创建kong-v2.8.1-init-db-job.yaml

vim kong-v2.8.1-init-db-job.yaml

添加内容如下

apiVersion: batch/v1
kind: Job
metadata:
  name: kong-migrations
  namespace: kong
spec:
  template:
    metadata:
      name: kong-migrations
    spec:
      imagePullSecrets:
        - name: aliimagesecret
      containers:
        - name: kong-migrations
          image: registry.cn-shenzhen.aliyuncs.com/yjy_k8s/kong-kong:v2.8.1
          env:
            - name: KONG_DATABASE
              value: 'postgres'
            - name: KONG_PG_HOST
              value: 'postgresql.kong.svc.cluster.local'
            - name: KONG_PG_PASSWORD
              value: 'kong'
            - name: KONG_PG_USER
              value: 'kong'
          args:
            - /bin/sh
            - -c
            - kong migrations bootstrap
      restartPolicy: Never

3.部署kong

3-1.部署kong deployment

创建kong-v2.8.1-deploy.yaml

vim kong-v2.8.1-deploy.yaml

添加内容如下

apiVersion: apps/v1
kind: Deployment
metadata:
  name: kong
  namespace: kong
spec:
  replicas: 1
  selector:
    matchLabels:
      app: kong
  template:
    metadata:
      labels:
        app: kong
    spec:
      imagePullSecrets:
        - name: aliimagesecret
      containers:
        - name: kong
          image: registry.cn-shenzhen.aliyuncs.com/yjy_k8s/kong-kong:v2.8.1
          env:
            - name: KONG_DATABASE
              value: 'postgres'
            - name: KONG_PG_HOST
              value: 'postgresql.kong.svc.cluster.local'
            - name: KONG_PG_PASSWORD
              value: 'kong'
            - name: KONG_PG_USER
              value: 'kong'
            - name: KONG_PROXY_ACCESS_LOG
              value: '/dev/stdout'
            - name: KONG_ADMIN_ACCESS_LOG
              value: '/dev/stdout'
            - name: KONG_PROXY_ERROR_LOG
              value: '/dev/stderr'
            - name: KONG_ADMIN_ERROR_LOG
              value: '/dev/stderr'
            - name: KONG_ADMIN_LISTEN
              value: '0.0.0.0:8001, 0.0.0.0:8444 ssl'
          ports:
            - containerPort: 8000
              name: web
            - containerPort: 8001
              name: admin
            - containerPort: 8443
              name: ssl
            - containerPort: 8444
              name: adminssl
          livenessProbe:
            exec:
              command:
                - kong
                - health
            initialDelaySeconds: 5
            timeoutSeconds: 1
            periodSeconds: 5
            successThreshold: 1
            failureThreshold: 3

执行创建

kubectl apply -f kong-v2.8.1-deploy.yaml -n kong

查看创建结果

kubectl get pods -n kong

显示

NAME                          READY   STATUS      RESTARTS   AGE
kong-bcf754d44-kglbr          1/1     Running     0          7m19s
kong-migrations-xchxx         0/1     Completed   0          14m
postgresql-856d6fbc6f-vpltq   1/1     Running     0          49m

3-2.部署kong service

创建kong-v2.8.1-svc.yaml

vim kong-v2.8.1-svc.yaml

添加内容如下

kind: Service
apiVersion: v1
metadata:
  name: kong-nodeport
  namespace: kong
spec:
  type: NodePort
  ports:
   - name: http
     protocol: TCP
     port: 8000
     targetPort: 8000
     nodePort: 30088
   - name: https
     protocol: TCP
     port: 8443
     targetPort: 8443
     nodePort: 32443
  selector:
    app: kong
---
kind: Service
apiVersion: v1
metadata:
  name: kong-admin
  namespace: kong
spec:
  ports:
   - name: admin
     protocol: TCP
     port: 8001
     targetPort: 8001
  selector:
    app: kong

执行创建

kubectl apply -f kong-v2.8.1-svc.yaml -n kong

查看创建结果

kubectl get svc -n kong

显示

NAME            TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                         AGE
kong-admin      ClusterIP   10.96.1.239     <none>        8001/TCP                        8m8s
kong-nodeport   NodePort    10.107.30.175   <none>        8000:30088/TCP,8443:32443/TCP   2m20s
postgresql      ClusterIP   10.96.134.61    <none>        5432/TCP                        57m

4.部署konga

4-1.部署konga deployment

创建konga-deployment.yaml

vim konga-deploy.yaml

添内容如下

apiVersion: apps/v1
kind: Deployment
metadata:
  name: konga
  namespace: kong
spec:
  replicas: 1
  selector:
    matchLabels:
      app: konga
  template:
    metadata:
      labels:
        app: konga
    spec:
      imagePullSecrets:
        - name: aliimagesecret
      containers:
        - name: konga
          image: registry.cn-shenzhen.aliyuncs.com/yjy_k8s/kong-konga:v0.14.9
          env:
            - name: DB_ADAPTER
              value: 'postgres'
            - name: DB_HOST
              value: 'postgresql.kong.svc.cluster.local'
            - name: DB_PORT
              value: '5432:5432'
            - name: DB_PASSWORD
              value: 'kong'
            - name: DB_USER
              value: 'kong'
            - name: DB_DATABASE
              value: 'konga'
          ports:
            - containerPort: 1337
              name: web

执行创建

kubectl apply -f konga-deploy.yaml -n kong

查看创建结果

kubectl get pods -n kong

显示

NAME                          READY   STATUS      RESTARTS   AGE
kong-bcf754d44-kglbr          1/1     Running     0          3h1m
kong-migrations-xchxx         0/1     Completed   0          3h7m
konga-64c5bb74bf-p2jsr        1/1     Running     0          20s
postgresql-7f46c9b847-vnvmh   1/1     Running     0          101s

4-2.部署konga service

创建konga-service.yaml

vim konga-svc.yaml

添加内容如下

kind: Service
apiVersion: v1
metadata:
  name: konga-nodeport
  namespace: kong
spec:
  type: NodePort
  ports:
   - name: http
     protocol: TCP
     port: 1337
     targetPort: 1337
     nodePort: 31337
  selector:
    app: konga

执行创建

kubectl apply -f konga-svc.yaml -n kong

查看创建结果

kubectl get pods -n kong

显示

NAME                          READY   STATUS      RESTARTS   AGE
kong-bcf754d44-kglbr          1/1     Running     0          3h44m
kong-migrations-xchxx         0/1     Completed   0          3h51m
konga-64c5bb74bf-p2jsr        1/1     Running     0          44m
postgresql-7f46c9b847-vnvmh   1/1     Running     0          45m

至此。网关kong以及可视化界面konga部署完成。并且使用nfs作为挂载。

如果你有任何问题,欢迎在底部留言。或者点击加入微信技术交流群 | 我的GitHub

码仔

文章作者

Janrs.com

发表回复

textsms
account_circle
email

Janrs.com | 杨建勇

k8s部署kong网关
[!TIP] 记录安装网关工具kong以及可视化管理工具konga 并使用postgresql作为kong的数据库,并且把postgresql挂载到nfs 注意:konga不能使用最新版的postgresql,根据网上多人配置,使用的…
扫描二维码继续阅读
2022-06-19