创建目录和命名空间
mkdir -p /data/yaml/kong && cd /data/yaml/kong
kubectl ns create kong
创建 postgres 数据库
mkdir -p /data/yaml/kong/postgres cd /data/yaml/kong/postgres
# 事先创建好 nfs 存储
cat deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: postgresql
namespace: kong
spec:
replicas: 1
selector:
matchLabels:
app: postgresql
template:
metadata:
labels:
app: postgresql
spec:
containers:
- name: postgresql
image: postgres:9.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-data
readOnly: false
mountPath: /var/lib/postgresql/data
volumes:
- name: postgresql-data
nfs:
path: /data/nfs/postgresql
server: 172.16.16.140
kubectl apply -f deployment.yml
cat svc.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 svc.yaml
初始化 kong 数据
mkdir -p /data/yaml/kong/kong-migrations && cd /data/yaml/kong/kong-migrations
cat job.yaml
apiVersion: batch/v1
kind: Job
metadata:
name: kong-migrations
namespace: kong
spec:
template:
metadata:
name: kong-migrations
spec:
containers:
- name: kong-migrations
image: kong:2.0.4
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
kubectl apply -f job.yaml
部署 kong
mkdir -p /data/yaml/kong/kong && cd /data/yaml/kong/kong
cat deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: kong
namespace: kong
spec:
replicas: 1
selector:
matchLabels:
app: kong
template:
metadata:
labels:
app: kong
spec:
containers:
- name: kong
image: kong:2.0.4
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 deployment.yml
cat svc.yml
kind: Service
apiVersion: v1
metadata:
name: kong-nodeport
namespace: kong
spec:
type: NodePort
ports:
- name: http
protocol: TCP
port: 8000
targetPort: 8000
nodePort: 30081
- 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 svc.yml
部署 konga
mkdir -p /data/yaml/kong/konga && cd /data/yaml/kong/konga
cat deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: konga
namespace: kong
spec:
replicas: 1
selector:
matchLabels:
app: konga
template:
metadata:
labels:
app: konga
spec:
containers:
- name: konga
image: pantsel/konga
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 deployment.yml
cat svc.yml
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 svc.yml
访问 http://你的IP:31337/
配置默认的连接: http://kong-admin.kong:8001