Add service account and role/rolebinding
This commit is contained in:
@@ -36,10 +36,28 @@ flink-cdc-session/
|
||||
├── _helpers.tpl
|
||||
├── configmap.yaml # flink-cdc.yaml + pipeline.yaml
|
||||
├── flinkdeployment.yaml # Flink Session Cluster
|
||||
├── ingress.yaml # Ingress (조건부)
|
||||
├── job.yaml # CDC 파이프라인 제출 Job (조건부)
|
||||
└── secrets.yaml # truststore / gcs-key Secret (조건부)
|
||||
├── role.yaml # Role (rbac.create: true 시 생성)
|
||||
├── rolebinding.yaml # RoleBinding (rbac.create: true 시 생성)
|
||||
├── secrets.yaml # truststore / gcs-key Secret (조건부)
|
||||
└── serviceaccount.yaml # ServiceAccount (serviceAccount.create: true 시 생성)
|
||||
```
|
||||
|
||||
## 리소스 명명 규칙
|
||||
|
||||
모든 리소스 이름은 Helm Release 이름을 기반으로 동적 생성됩니다.
|
||||
|
||||
| 리소스 | 이름 패턴 |
|
||||
| --- | --- |
|
||||
| FlinkDeployment | `{release-name}-session` |
|
||||
| ConfigMap | `{release-name}-pipeline-config` |
|
||||
| ServiceAccount | `{release-name}` |
|
||||
| Role / RoleBinding | `{release-name}` |
|
||||
| Truststore Secret (chart 생성 시) | `{release-name}-flink-truststore` |
|
||||
|
||||
예: `helm install flink-cdc-session .` → FlinkDeployment 이름 `flink-cdc-session-session`
|
||||
|
||||
---
|
||||
|
||||
## 외부 JKS(truststore) 사용 여부 결정
|
||||
@@ -62,7 +80,7 @@ Flink는 다음 엔드포인트와 HTTPS로 통신합니다.
|
||||
|
||||
**`truststore.enabled: false` (외부 JKS 불필요)**
|
||||
→ 모든 엔드포인트가 **공인 CA**(Let's Encrypt, DigiCert 등)로 서명된 인증서를 사용하는 경우
|
||||
→ JVM 기본 cacerts만으로 TLS 검증이 가능하며, `flink-truststore` Secret도 불필요
|
||||
→ JVM 기본 cacerts만으로 TLS 검증이 가능하며, truststore Secret도 불필요
|
||||
|
||||
> **왜 외부 JKS가 필요한가**
|
||||
> Flink JVM 옵션 `-Djavax.net.ssl.trustStore`는 JVM 기본 cacerts를 **완전히 교체**합니다.
|
||||
@@ -113,7 +131,7 @@ kubectl run ssl-check --rm -it --image=alpine/openssl --restart=Never -- \
|
||||
Docker 이미지 내부의 JVM cacerts를 truststore 베이스로 사용합니다.
|
||||
|
||||
```bash
|
||||
IMAGE="wbsong111/flink-cdc-pipeline:3.5.0-flink1.20-r1"
|
||||
IMAGE="paasup/flink-cdc-pipeline:3.5.0-flink1.20-r1"
|
||||
|
||||
docker run --rm --entrypoint="" "${IMAGE}" \
|
||||
cat /opt/java/openjdk/lib/security/cacerts > truststore.jks
|
||||
@@ -164,7 +182,16 @@ curl -v --cacert /tmp/internal-ca.pem https://lakekeeper.example.org/catalog 2>&
|
||||
|
||||
#### Step 4 — Kubernetes Secret 생성
|
||||
|
||||
chart가 자동 생성하는 Secret 이름은 `{release-name}-flink-truststore`입니다.
|
||||
기존 Secret을 재사용하려면 `truststore.secretName`에 이름을 지정합니다.
|
||||
|
||||
```bash
|
||||
# chart 명명 규칙에 맞게 생성 (release name: flink-cdc-session)
|
||||
kubectl create secret generic flink-cdc-session-flink-truststore \
|
||||
--from-file=truststore.jks=./truststore.jks \
|
||||
-n flink-test
|
||||
|
||||
# 또는 기존 Secret 이름 그대로 사용 (custom-values.yaml에서 secretName 지정)
|
||||
kubectl create secret generic flink-truststore \
|
||||
--from-file=truststore.jks=./truststore.jks \
|
||||
-n flink-test
|
||||
@@ -173,7 +200,7 @@ kubectl create secret generic flink-truststore \
|
||||
기존 Secret 업데이트:
|
||||
|
||||
```bash
|
||||
kubectl create secret generic flink-truststore \
|
||||
kubectl create secret generic flink-cdc-session-flink-truststore \
|
||||
--from-file=truststore.jks=./truststore.jks \
|
||||
-n flink-test \
|
||||
--dry-run=client -o yaml | kubectl apply -f -
|
||||
@@ -188,7 +215,7 @@ kubectl create secret generic flink-truststore \
|
||||
|
||||
```bash
|
||||
# truststore.jks가 Pod에 정상 마운트되었는지 확인
|
||||
kubectl exec -n flink-test deploy/flink-cdc-session -- ls -la /opt/flink/certs/
|
||||
kubectl exec -n flink-test deploy/flink-cdc-session-session -- ls -la /opt/flink/certs/
|
||||
|
||||
# JVM이 truststore를 인식하는지 확인 (JobManager 로그에서 SSL 관련 출력)
|
||||
kubectl logs -n flink-test -l component=jobmanager | grep -i "truststore\|ssl\|tls" | head -20
|
||||
@@ -268,7 +295,7 @@ helm install flink-cdc-session ./flink/helm/flink-cdc-session \
|
||||
-f values.yaml \
|
||||
-f custom-values.yaml
|
||||
|
||||
# 2단계: Cluster 기동 확인
|
||||
# 2단계: Cluster 기동 확인 (LIFECYCLE STATE가 STABLE이 될 때까지 대기)
|
||||
kubectl get flinkdeployment -n flink-test -w
|
||||
|
||||
# 3단계: Job 포함해서 업그레이드
|
||||
@@ -279,6 +306,17 @@ helm upgrade flink-cdc-session ./flink/helm/flink-cdc-session \
|
||||
--set job.enabled=true
|
||||
```
|
||||
|
||||
### 기존 truststore Secret 재사용
|
||||
|
||||
네임스페이스에 이미 truststore Secret이 있는 경우 `truststore.secretName`으로 지정합니다.
|
||||
|
||||
```yaml
|
||||
# custom-values.yaml
|
||||
truststore:
|
||||
enabled: true
|
||||
secretName: flink-truststore # 기존 Secret 이름
|
||||
```
|
||||
|
||||
### truststore 불필요한 경우 (공인 CA 환경)
|
||||
|
||||
```bash
|
||||
@@ -296,7 +334,7 @@ helm install flink-cdc-session ./flink/helm/flink-cdc-session \
|
||||
### Secret도 chart에서 생성하는 경우
|
||||
|
||||
```bash
|
||||
# truststore Secret chart 생성
|
||||
# truststore Secret chart 생성 (이름: {release-name}-flink-truststore)
|
||||
helm install flink-cdc-session ./flink/helm/flink-cdc-session \
|
||||
-n flink-test \
|
||||
--set truststore.create=true \
|
||||
@@ -324,16 +362,39 @@ helm uninstall flink-cdc-session -n flink-test
|
||||
|
||||
| 파라미터 | 기본값 | 설명 |
|
||||
|----------|--------|------|
|
||||
| `image.repository` | `wbsong111/flink-cdc-pipeline` | 컨테이너 이미지 저장소 |
|
||||
| `image.repository` | `paasup/flink-cdc-pipeline` | 컨테이너 이미지 저장소 |
|
||||
| `image.tag` | `3.5.0-flink1.20-r1` | 이미지 태그 |
|
||||
| `image.pullPolicy` | `Always` | 이미지 풀 정책 |
|
||||
|
||||
### ServiceAccount
|
||||
|
||||
| 파라미터 | 기본값 | 설명 |
|
||||
| --- | --- | --- |
|
||||
| `serviceAccount.create` | `true` | ServiceAccount 생성 여부 |
|
||||
| `serviceAccount.name` | `""` | SA 이름. 비어있으면 Release.Name 사용 |
|
||||
|
||||
### RBAC
|
||||
|
||||
| 파라미터 | 기본값 | 설명 |
|
||||
| --- | --- | --- |
|
||||
| `rbac.create` | `true` | Role / RoleBinding 생성 여부 |
|
||||
|
||||
`rbac.create: true` 시 생성되는 Role 권한:
|
||||
|
||||
| 리소스 | 권한 |
|
||||
| --- | --- |
|
||||
| `pods` | `get`, `list`, `watch`, `create`, `delete`, `patch` |
|
||||
| `configmaps` | `get`, `list`, `watch`, `create`, `update`, `patch`, `delete` |
|
||||
| `services` | `get`, `list`, `create`, `delete` |
|
||||
| `events` | `create`, `patch` |
|
||||
| `apps/deployments` | `get`, `list`, `watch`, `create`, `update`, `patch`, `delete` |
|
||||
| `apps/replicasets` | `get`, `list`, `watch`, `create`, `update`, `patch`, `delete` |
|
||||
|
||||
### Flink 클러스터
|
||||
|
||||
| 파라미터 | 기본값 | 설명 |
|
||||
|----------|--------|------|
|
||||
| `flinkVersion` | `v1_20` | Flink 버전 |
|
||||
| `serviceAccount` | `flink` | Pod 서비스 어카운트 |
|
||||
| `jobManager.replicas` | `1` | JobManager 인스턴스 수 |
|
||||
| `jobManager.memory` | `1024m` | JobManager 메모리 |
|
||||
| `jobManager.cpu` | `0.5` | JobManager CPU |
|
||||
@@ -372,8 +433,8 @@ helm uninstall flink-cdc-session -n flink-test
|
||||
|
||||
| 파라미터 | 기본값 | 설명 |
|
||||
|----------|--------|------|
|
||||
| `truststore.enabled` | `true` | 외부 JKS 사용 여부. 사설 CA 환경이면 `true` |
|
||||
| `truststore.secretName` | `flink-truststore` | truststore Secret 이름 |
|
||||
| `truststore.enabled` | `false` | 외부 JKS 사용 여부. 사설 CA 환경이면 `true` |
|
||||
| `truststore.secretName` | `""` | 기존 Secret 이름 지정. 비어있으면 `{release-name}-flink-truststore` 사용 |
|
||||
| `truststore.password` | `changeit` | JKS 패스워드 |
|
||||
| `truststore.create` | `false` | `true`이면 chart가 Secret 생성 |
|
||||
| `truststore.base64jks` | `""` | `create: true` 시 필수, base64 인코딩된 .jks |
|
||||
@@ -427,11 +488,16 @@ route:
|
||||
| 파라미터 | 기본값 | 설명 |
|
||||
|----------|--------|------|
|
||||
| `job.enabled` | `true` | `false`이면 Job 리소스 미생성 |
|
||||
| `job.name` | `submit-cdc` | Job 리소스 이름 |
|
||||
| `job.name` | `submit-cdc` | Job 이름 suffix. 전체 이름: `{release-name}-{job.name}` |
|
||||
| `job.restAddress` | `flink-cdc-session-rest` | Session Cluster REST 서비스명 |
|
||||
| `job.restPort` | `8081` | REST 포트 |
|
||||
| `job.pipelineFile` | `./conf/pipeline.yaml` | 파이프라인 설정 파일 경로 |
|
||||
|
||||
> `job.restAddress`는 FlinkDeployment 이름에 `-rest`를 붙인 값입니다.
|
||||
> 이 chart가 생성하는 FlinkDeployment 이름은 `{release-name}-session`이므로
|
||||
> REST 서비스명은 `{release-name}-session-rest`가 됩니다.
|
||||
> 예: release name `flink-cdc-session` → `job.restAddress: flink-cdc-session-session-rest`
|
||||
|
||||
---
|
||||
|
||||
## 렌더링 확인
|
||||
@@ -458,14 +524,19 @@ helm template flink-cdc-session . -n flink-test \
|
||||
## 배포 후 확인
|
||||
|
||||
```bash
|
||||
# Session Cluster 상태 확인
|
||||
# Session Cluster 상태 확인 (release name: flink-cdc-session)
|
||||
kubectl get flinkdeployment -n flink-test
|
||||
# NAME JOB STATUS LIFECYCLE STATE
|
||||
# flink-cdc-session-session STABLE
|
||||
|
||||
# Job 로그 확인
|
||||
kubectl logs -n flink-test job/submit-cdc
|
||||
# JobManager 로그 확인
|
||||
kubectl logs -n flink-test -l app.kubernetes.io/instance=flink-cdc-session
|
||||
|
||||
# Flink REST API로 Job 상태 확인
|
||||
kubectl exec -n flink-test <jobmanager-pod> -- curl -s http://localhost:8081/jobs
|
||||
|
||||
# Job 삭제 후 재제출
|
||||
kubectl delete job submit-cdc -n flink-test
|
||||
kubectl delete job flink-cdc-session-submit-cdc -n flink-test
|
||||
helm upgrade flink-cdc-session . -n flink-test \
|
||||
-f values.yaml -f custom-values.yaml \
|
||||
--set job.enabled=true
|
||||
|
||||
Reference in New Issue
Block a user