Search code examples
kubernetes-helmkong

Installing kong with postgresql and add service with REST API


I currently have a problem installing kong with postgresql and add the service through REST calls to kong admin server.

My install command as below :

helm install kong kong/kong -n kong \
--set ingressController.installCRDs=false  \
--set admin.enabled=true \
--set admin.http.enabled=true \
--set postgresql.enabled=true \
--set postgresql.auth.username=kong \
--set postgresql.auth.database=kong \
--set postgresql.service.ports.postgresql=5432 \
--set postgresql.image.tag=13.6.0-debian-10-r52 \
--set migrations.init=false \
--set migrations.preUpgrade=false \
--set migrations.postUpgrade=false 

It installs normally After registering the service, the following message appears. Don't worry, LoadBalance pending will be modified to NodePort later!

root@nlu-framework-master-1:~# k get all -n kong
NAME                             READY   STATUS    RESTARTS   AGE
pod/kong-kong-5b685cd4b9-t95mx   2/2     Running   1          3m22s
pod/kong-postgresql-0            1/1     Running   1          3m22s

NAME                               TYPE           CLUSTER-IP     EXTERNAL-IP   PORT(S)                         AGE
service/kong-kong-admin            NodePort       10.233.7.63    <none>        8001:31422/TCP,8444:31776/TCP   3m22s
service/kong-kong-proxy            LoadBalancer   10.233.0.19    <pending>     80:30511/TCP,443:30358/TCP      3m22s
service/kong-postgresql            ClusterIP      10.233.42.35   <none>        5432/TCP                        3m22s
service/kong-postgresql-headless   ClusterIP      None           <none>        5432/TCP                        3m22s

NAME                        READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/kong-kong   1/1     1            1           3m22s

NAME                                   DESIRED   CURRENT   READY   AGE
replicaset.apps/kong-kong-5b685cd4b9   1         1         1       3m22s

NAME                               READY   AGE
statefulset.apps/kong-postgresql   1/1     3m22s

My add service command as below :

curl -X POST http://10.233.7.63:8001/services \
   -H 'Content-Type: application/json' \
   -d '{"name":"k8s-api","url":"https://192.168.0.50:6443/api/v1/"}'

add service result message as below:

{"code":12,"message":"cannot create 'services' entities when not using a database","name":"operation unsupported"}

please anybody help me


Solution

  • I solve problem by myself

    1. postgresql version seems to have a bug in version 14 or higher, install helm chart cetic/postgresql. helm chart cetic/postgresql's postgresql version 11.5 https://artifacthub.io/packages/helm/cetic/postgresql
    helm install postgres cetic/postgresql -n kong \
    --set postgresql.username=kong \
    --set postgresql.password=kong \
    --set postgresql.database=kong \
    --set postgresql.port=5432
    
    1. install bitnami/kong with external postgresql
    helm install kong -n kong  bitnami/kong \
    --set postgresql.enabled=false \
    --set postgresql.external.host=postgres-postgresql \
    --set postgresql.external.user=kong \
    --set postgresql.external.password=kong \
    --set postgresql.external.database=kong 
    
    k get all -n kong
    NAME                        READY   STATUS    RESTARTS   AGE
    pod/kong-9688f7f55-42cfm    2/2     Running   3          2m15s
    pod/kong-9688f7f55-5ntvw    2/2     Running   3          2m15s
    pod/postgres-postgresql-0   1/1     Running   0          4m54s
    
    NAME                          TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
    service/kong                  ClusterIP   10.233.39.160   <none>        80/TCP,443/TCP   2m15s
    service/postgres-postgresql   ClusterIP   10.233.23.169   <none>        5432/TCP         4m54s
    
    NAME                   READY   UP-TO-DATE   AVAILABLE   AGE
    deployment.apps/kong   2/2     2            2           2m15s
    
    NAME                             DESIRED   CURRENT   READY   AGE
    replicaset.apps/kong-9688f7f55   2         2         2       2m15s
    
    NAME                                   READY   AGE
    statefulset.apps/postgres-postgresql   1/1     4m54s
    
    1. Change the service type to nodeport andadd admin service
    k edit service/kong -n kong
    
      - name: http-admin
        port: 8001
        protocol: TCP
        targetPort: http-admin
      - name: https-admin
        port: 8444
        protocol: TCP
        targetPort: https-admin
    
    1. Test add service with admin service clusterIP.
    curl -X POST http://10.233.39.160:8001/services \
    >    -H 'Content-Type: application/json' \
    >    -d '{"name":"k8s-api","url":"https://192.168.0.50:6443/api/v1/"}'
    
    1. Check service has been successfully added.
    curl  http://10.233.39.160:8001/services | jq
    
      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                     Dload  Upload   Total   Spent    Left  Speed
    100   401  100   401    0     0    97k      0 --:--:-- --:--:-- --:--:--   97k
    {
      "next": null,
      "data": [
        {
          "id": "5cc7f7ce-3494-44fa-b76c-47795192f541",
          "host": "192.168.0.50",
          "path": "/api/v1/",
          "protocol": "https",
          "retries": 5,
          "ca_certificates": null,
          "write_timeout": 60000,
          "port": 6443,
          "tags": null,
          "name": "k8s-api",
          "tls_verify": null,
          "client_certificate": null,
          "tls_verify_depth": null,
          "connect_timeout": 60000,
          "enabled": true,
          "created_at": 1649513267,
          "updated_at": 1649513267,
          "read_timeout": 60000
        }
      ]
    }