You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
5.9 KiB
5.9 KiB
Kong Ingress Controller 배포
1. 배포 방법
1) 배포시 주의 사항
- 배포 전 k8s service의 LoadBalancer를 사용할 수 있는지 확인 필요.
- cert-manager가 배포되었는지 확인 필요
2) 배포 방법
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 설정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로 서비스를 구분한다.
# 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) 인증서 생성 설정
-
kong 서비스의 Ingress에서 사용할 인증서를 생성한다.
-
Cert-manager가 설치되어 있어야 사용 가능하다. 그리고
ClusterIssuer도 생성되어 있어야 하고 생성되어 있는ClusterIssuer에 따라 values.yaml 값을 수정해야 한다. -
인증서는
kong admin과kong manager에서 사용하고 있고 admin 인증서를 생성하여 같이 사용한다.certificates: enabled: true clusterIssuer: selfsigned-issuer # 배포될 issuer에 따라 설졍 변경 필요. admin: enabled: true commonName: kong.example.org # 도메인 변경 필요 portal: enabled: false proxy: enabled: false cluster: enabled: false
4) Kong Configuration 설정
- Kong configuration은 환경변수를 추가하여 설정한다.
- 내장 DB 설정에 맞춰 설정해야 한다. 외장 DB를 사용할 경우 설정 변경이 필요하다.
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 설정
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 연결정보를 수정해야 한다.
postgresql:
enabled: true
auth:
database: kong
username: kong
password: password
7) proxy 서비스
7.1) Loadbalancer 사용
- ingress 서비스를 proxy가 사용하는 service의 타입을 LoadBalancer로 배포하여 서비스를 제공한다.
proxy:
enabled: true
type: LoadBalancer
ingress:
enable: false
7.2) host port 사용
- ingress 서비스를 위해 proxy의 80, 443을 worker node의 80, 443과 바인드하여 서비스를 제공한다.
proxy:
enabled: true
type: ClusterIP
ingress:
enable: false
http:
hostPort: 80
tls:
hostPort: 443