diff --git a/charts/kong/CUSTOM-README.md b/charts/kong/CUSTOM-README.md new file mode 100644 index 0000000..dd66eb7 --- /dev/null +++ b/charts/kong/CUSTOM-README.md @@ -0,0 +1,199 @@ + +# Kong Ingress Controller 배포 + +## 1. 배포 방법 + +### 1) 배포시 주의 사항 + +- 배포 전 k8s service의 LoadBalancer를 사용할 수 있는지 확인 필요. +- cert-manager가 배포되었는지 확인 필요 + +### 2) 배포 방법 + +``` sh +git clone https://github.com/paasup/dip-catalog.git +cd charts/kong +helm upgrade kong ./ -f custom-values.yaml --install -n kong --create-namespace +``` + + + +## 2. custom-values.yaml 설명 + +### 1) Pod 설정 + + +| Name | 설명 | 기본값 | +| ---------------------- | ------------------------------------------------------------ | ------ | +| `image.repository` |이미지 설정. 커스텀 플러그인이 설치된 이미지를 사용.|`"paasup/kong-oidc-keycloak-authz"`| +| `image.tag` | 이미지 태그 설정 | "3.4.0-0.1.0" | +| `deployment.kong.enabled` | Kong의 사용 여부 설정.
'false'로 설정 시 `ingressController.enable=ture`로 설정해야함 | 'true' | +| `deployment.daemonset` | 배포되는 kong의 리소스 타입을 설정.
'true' : daemonset, 'false': deployment | "false" | + + + +- `proxy` 컨테이너의 TimeZone 설정 + + ``` yaml + deployment: + # proxy 컨테이너의 timezone 설정 + # pod가 배포될 노드의 localtime 정보를 마운트, 노드의 해당 경로에 파일이 있는지 확인 필요. + userDefinedVolumeMounts: + - name: tz-config + mountPath: /etc/localtime + userDefinedVolumes: + - name: tz-config + hostPath: + path: /usr/share/zoneinfo/Asia/Seoul + ``` + + + +### 2) Kong 서비스 설정 + +- `admin`, `manager`의 ingress 설정에 domain 정보 변경이 필요하다. + `admin`, `manager`는 같은 도메인을 사용하고 path로 서비스를 구분한다. + +``` yaml +# Kong proxy 서비스 설정 +proxy: + enabled: true + type: LoadBalancer + ingress: + enable: false + +# Kong admin API 서비스 설정 +admin: + annotations: + konghq.com/protocol: https + enabled: true + type: ClusterIP + ingress: + enabled: true + annotations: + konghq.com/https-redirect-status-code: "301" + konghq.com/protocols: https + konghq.com/strip-path: "true"" + hostname: kong.example.org # 도메인 변경 필요 + ingressClassName: kong + path: /api + # certificate 설정을 이용해 생성된 tls secret 이름을 설정 + tls: kong-kong-admin-cert + +# Kong Manager(UI) 서비스 설정 +manager: + enabled: true + type: ClusterIP + annotations: + konghq.com/protocol: https + http: + enabled: false + ingress: + enabled: true + annotations: + konghq.com/https-redirect-status-code: "301" + hostname: kong.example.org # 도메인 변경 필요 + ingressClassName: kong + path: / + # certificate 설정을 이용해 생성된 tls secret 이름을 설정 + tls: kong-kong-admin-cert +``` + + + +### 3) 인증서 생성 설정 + +- Cert-manager가 설치되어 있어야 사용 가능하다. + +- Ingress가 배포되는 서비스의 Ingress를 생성한다. + +- 인증서는 `kong admin`과 `kong manager`에서 사용하고 있고 admin 인증서를 생성하여 같이 사용한다. + + ``` yaml + certificates: + enabled: true + clusterIssuer: selfsigned-issuer # + admin: + enabled: true + commonName: kong.example.org # 도메인 변경 필요 + portal: + enabled: false + proxy: + enabled: false + cluster: + enabled: false + ``` + + + +### 4) Kong Configuration 설정 + +- Kong configuration은 환경변수를 추가하여 설정한다. +- 내장 DB 설정에 맞춰 설정해야 한다. + 외장 DB를 사용할 경우 설정 변경이 필요하다. + +``` yaml +env: + admin_error_log: /dev/stdout + admin_gui_access_log: /dev/stdout + admin_gui_error_log: /dev/stdout + admin_access_log: /dev/stdout + cluster_data_plane_purge_delay: 60 + cluster_listen: 0.0.0.0:8005 + cluster_telemetry_listen: 0.0.0.0:8006 + log_level: info + lua_package_path: /opt/?.lua;; + nginx_worker_processes: "2" + database: postgres + pg_database: kong + pg_host: kong-postgresql.kong.svc.cluster.local + pg_ssl: "off" + pg_ssl_verify: "off" + pg_user: kong + pg_password: password # kong에서 사용할 db 사용자의 패스워드로 변경. + plugins: bundled, oidc, keycloak-authz + prefix: /kong_prefix/ + proxy_access_log: /dev/stdout + proxy_error_log: /dev/stdout + proxy_stream_access_log: /dev/stdout + proxy_stream_error_log: /dev/stdout + status_listen: 0.0.0.0:8100 + trusted_ips: 0.0.0.0/0,::/0 +``` + + + +### 5) Ingress Controller 설정 + +``` yaml +ingressController: + enabled: true + image: + repository: kong/kubernetes-ingress-controller + tag: "3.3" # kong 3.4 버전을 지원하는 최신 ingress conroller 버전 + env: + kong_admin_filter_tag: ingress_controller_kong + kong_admin_tls_skip_verify: true + kong_admin_url: https://localhost:8444 + publish_service: kong/kong-kong-proxy # {namespace}/{kong-proxy-service}으로 변경 + + # ingress-controller 컨테이너의 timezone 설정 + customEnv: + TZ: "Asia/Seoul" +``` + + + +### 6) 내장 postgresql + +- 해당 설정에 따라서 `env`에 postgresql 연결정보를 수정해야 한다. + +```yaml +postgresql: + enabled: true + auth: + database: kong + username: kong + password: password +``` + diff --git a/charts/kong/custom-values.yaml b/charts/kong/custom-values.yaml new file mode 100644 index 0000000..0bb5cc8 --- /dev/null +++ b/charts/kong/custom-values.yaml @@ -0,0 +1,154 @@ +image: + repository: paasup/kong-oidc-keycloak-authz + tag: 3.4.0-0.1.0 + +deployment: + kong: + enabled: true + daemonset: false + + # proxy 컨테이너의 timezone 설정 + userDefinedVolumeMounts: + - name: tz-config + mountPath: /etc/localtime + userDefinedVolumes: + - name: tz-config + hostPath: + path: /usr/share/zoneinfo/Asia/Seoul + +# Kong proxy 서비스 설정 +proxy: + enabled: true + type: LoadBalancer + ingress: + enable: false + +# Kong admin API 서비스 설정 +admin: + annotations: + konghq.com/protocol: https + enabled: true + type: ClusterIP + ingress: + enabled: true + annotations: + konghq.com/https-redirect-status-code: "301" + konghq.com/protocols: https + konghq.com/strip-path: "true" + hostname: kong.example.org + ingressClassName: kong + path: /api + # certificate를 사용하여 추가시 해당 이름으로 생성됨 + # (helm release는 kong으로 배포해야함) + tls: kong-kong-admin-cert + +manager: + enabled: true + type: ClusterIP + annotations: + konghq.com/protocol: https + http: + enabled: false + ingress: + enabled: true + annotations: + konghq.com/https-redirect-status-code: "301" + nginx.ingress.kubernetes.io/backend-protocol: HTTPS + hostname: kong.example.org + ingressClassName: kong + path: / + tls: kong-kong-admin-cert + +# cluster: +# enabled: false +# type: ClusterIP +# tls: +# enabled: true +# labels: +# konghq.com/service: cluster + +# Enterprise 영역 비활성화 +enterprise: + enabled: false +portal: + enabled: false +portalapi: + enabled: false +clustertelemetry: + enabled: false + +# cert-manager를 통한 인증서 생성 설정 +certificates: + enabled: true + clusterIssuer: selfsigned-issuer + admin: + enabled: true + commonName: kong.example.org + portal: + enabled: false + proxy: + enabled: false + cluster: + enabled: false + +# Kong의 Conriguration 설정 +env: + #admin_gui_url: https://kong.example.org/ # kong manager의 URL 주소 + #admin_gui_api_url: https://kong.example.org/api # + admin_access_log: /dev/stdout + admin_error_log: /dev/stdout + admin_gui_access_log: /dev/stdout + admin_gui_error_log: /dev/stdout + cluster_data_plane_purge_delay: 60 + cluster_listen: 0.0.0.0:8005 + cluster_telemetry_listen: 0.0.0.0:8006 + log_level: info + lua_package_path: /opt/?.lua;; + nginx_worker_processes: "2" + database: postgres + pg_database: kong + pg_host: kong-postgresql.kong.svc.cluster.local + pg_ssl: "off" + pg_ssl_verify: "off" + pg_user: kong + pg_password: paasadm1234! + plugins: bundled, oidc, keycloak-authz + prefix: /kong_prefix/ + proxy_access_log: /dev/stdout + proxy_error_log: /dev/stdout + proxy_stream_access_log: /dev/stdout + proxy_stream_error_log: /dev/stdout + status_listen: 0.0.0.0:8100 + trusted_ips: 0.0.0.0/0,::/0 + + + +# Ingress Controller 설정 +ingressController: + enabled: true + image: + repository: kong/kubernetes-ingress-controller + tag: "3.3" + env: + kong_admin_filter_tag: ingress_controller_kong + kong_admin_tls_skip_verify: true + kong_admin_url: https://localhost:8444 + publish_service: kong/kong-kong-proxy + + # ingress-controller 컨테이너의 timezone 설정 + customEnv: + TZ: "Asia/Seoul" + +migrations: + enabled: true + postUpgrade: true + preUpgrade: true + + +# sub-chart postgres +postgresql: + enabled: true + auth: + database: kong + username: kong + password: paasadm1234!