광고
일단 가장 중요한 것
kasten은 기본적으로 자체 스냅샷 표준을 기반으로 백업 받기 때문에 CSI Driver 가 볼륨 스냅샷 기능을 지원해야 하며, 사전에[
VolumeSanpshotClass가 설치 전 생성해야 함
1. 온라인 설치 방법
외부 인터넷 통신이 된다는 전제하게 진행
Step 1 : Helm repo 추가 및 네임스페이스 생성
ubuntu@k8s-master:~$ kubectl create ns kasten-io
namespace/kasten-io createdStep 2 : Kasten 배포
helm install k10 kasten/k10 --namespace=kasten-io \
--set global.persistence.storageClass="rook-ceph-block" \
--set auth.tokenAuth.enabled=true \
--set eula.accept=true \
--set eula.company="test" \
--set eula.email="**" / 회사 계정입력
Step 3 : kasten Service 확인
저는 조금 오래걸렸습니다. 리소스가 좀 딸리네요
Pod 켜지는중
PVC : kasten에 필요한 pvc 입니다. 스토리지 클래스는 CSI 의 스냅샷 기능이 있는 SC로 사용하여 배포.
SVC : 이렇게가 많은 서비스들이 있네요… 일단 pod 는 정상이니 진행하겠습니다.
Step 4 : Kasten 토큰 생성
관리 권한 서비스 토큰 생성하여 들어갈 수 있음
이권한도 들어가야함 .
https://docs.kasten.io/latest/access/rbac/
# kasten 서비스 계정 만들기
kubectl create serviceaccount k10-admin -n kasten-io
# 생성
kubectl create token k10-admin --n kasten-io --duration=24h판단 미스..
광고
현재 Cluster IP로 기본 설정되어있어 들어가기 어려움 그래서 두가지 경우가 있었음..
방법 1 : 임시로 포트포워딩
kubectl port-forward service/gateway -n kasten-io 8080:80 --address 0.0.0.0방법 2 : NordPort 로 변경해서 영구적으로 접속가능하게 하는 방법
## 업데이트 후 진행
helm upgrade k10 kasten/k10 --namespace=kasten-io \
--reuse-values \
--set gateway.service.type="NodePort"하지만 나는 귀찮기때문에 임시 포트포워딩만 해주겠습니다…
접속 완
접속 후 토근 생성받은 것만 넣으면
이슈사항
토큰 생성 명령어로 토큰 집어넣었는데 안됨….
Auth 로그 보니 불일치? 이런게 있음… 왜그런건지는 모르겠음.
+ GPT 피셜은 K8S 가 거부 했다는 의미
veeam 커뮤니티 찾아보니까 이런게 많아서 우회해서 고정 시크릿 토큰 하나 받아서 하면 된다는 피셜 알게됨
해결 방법
기존 k10-admin 계정과 결합하는 수동 토큰 시크릿 생성 yaml 짜기
# k10-admin.yaml
apiVersion: v1
kind: Secret
metadata:
name: k10-admin-token-secret
namespace: kasten-io
annotations:
kubernetes.io/service-account.name: "k10-admin"
type: kubernetes.io/service-account-token
$ kubectl apply -f k10-admin.yaml 실행고정 시크릿 내부에서 순수한 베어 토큰만 추출 (디코딩한거)
kubectl get secret k10-admin-token-secret -n kasten-io -o jsonpath='{.data.token}' | base64 --decode; echo ""
그럼 디코딩한걸로 주입하면?
안됨…
실시간 로그 분석
log does not need rotating (log size is below the 'size' threshold)
2026/06/05 05:55:31 "GET http://192.168.181.81:8000/healthz HTTP/1.1" from 172.22.3.64:47616 - 200 9B in 19.112µs
2026/06/05 05:55:31 "GET http://192.168.181.81:8000/healthz HTTP/1.1" from 172.22.3.64:47626 - 200 9B in 11.741µs
{"File":"kasten.io/k10/kio/auth/handlers/ok.go","Function":"kasten.io/k10/kio/auth/handlers.(*OKHandler).ServeHTTP","Line":29,"RequestID":"2a60b227-60a3-11f1-bad6-3e4074cddbd0","cluster_name":"7eea85a1-9661-44ae-8f2a-049917479af4","hostname":"auth-svc-bb59bc84b-2l4ll","level":"info","msg":"Authenticated: no auth required","path":"/v0/authz/k10/auth-svc/v0/login","spanID":"c9d72c3a297742f6","status":200,"time":"2026-06-05T05:55:33.211Z","traceID":"c5c90ed2901982ec7192b2dbd5f04153","version":"8.5.11"}
2026/06/05 05:55:33 "POST http://172.22.3.60:31133/k10/auth-svc/v0/login HTTP/1.1" from 172.22.3.60:4412 - 200 0B in 20.422594ms
{"File":"kasten.io/k10/kio/auth/handlers/redirect.go","Function":"kasten.io/k10/kio/auth/handlers.(*RedirectHandler).ServeHTTP","Line":34,"RequestID":"2a66a5c8-60a3-11f1-bad6-3e4074cddbd0","cluster_name":"7eea85a1-9661-44ae-8f2a-049917479af4","hostname":"auth-svc-bb59bc84b-2l4ll","level":"info","location":"/k10/?page=Login","msg":"Redirected: no token in X-Forwarded-Access-Token or Authorization","path":"/v0/authz/k10/","spanID":"24adce4aff8e0745","status":307,"time":"2026-06-05T05:55:33.250Z","traceID":"10185648b2b8f4f451e573b7715946c3","version":"8.5.11"}
2026/06/05 05:55:33 "GET http://172.22.3.60:31133/k10/ HTTP/1.1" from 172.22.3.60:4412 - 307 52B in 2.010222ms
{"File":"kasten.io/k10/kio/auth/handlers/redirect.go","Function":"kasten.io/k10/kio/auth/handlers.(*RedirectHandler).ServeHTTP","Line":34,"RequestID":"2a839419-60a3-11f1-bad6-3e4074cddbd0","cluster_name":"7eea85a1-9661-44ae-8f2a-049917479af4","hostname":"auth-svc-bb59bc84b-2l4ll","level":"info","location":"/k10/?page=Login","msg":"Redirected: no token in X-Forwarded-Access-Token or Authorization","path":"/v0/authz/k10/dashboardbff-svc/v0/upgradeInfo","spanID":"7f32ca2db357deec","status":307,"time":"2026-06-05T05:55:33.440Z","traceID":"f13000b73a6923a97de7221cb924eb4a","version":"8.5.11"}
2026/06/05 05:55:33 "GET http://172.22.3.60:31133/k10/dashboardbff-svc/v0/upgradeInfo HTTP/1.1" from 172.22.3.60:4412 - 307 52B in 3.426818ms
{"File":"kasten.io/k10/kio/auth/handlers/redirect.go","Function":"kasten.io/k10/kio/auth/handlers.(*RedirectHandler).ServeHTTP","Line":34,"RequestID":"2a842399-60a3-11f1-bad6-3e4074cddbd0","cluster_name":"7eea85a1-9661-44ae-8f2a-049917479af4","hostname":"auth-svc-bb59bc84b-2l4ll","level":"info","location":"/k10/?page=Login","msg":"Redirected: no token in X-Forwarded-Access-Token or Authorization","path":"/v0/authz/k10/favicon.ico","spanID":"76c9a5ed35c70913","status":307,"time":"2026-06-05T05:55:33.443Z","traceID":"9ea18ae98d831a493d675b1723eeec81","version":"8.5.11"}
2026/06/05 05:55:33 "GET http://172.22.3.60:31133/k10/favicon.ico HTTP/1.1" from 172.22.3.60:64294 - 307 52B in 7.153974ms
{"File":"kasten.io/k10/kio/auth/handlers/redirect.go","Function":"kasten.io/k10/kio/auth/handlers.(*RedirectHandler).ServeHTTP","Line":34,"RequestID":"2a8568ce-60a3-11f1-bad6-3e4074cddbd0","cluster_name":"7eea85a1-9661-44ae-8f2a-049917479af4","hostname":"auth-svc-bb59bc84b-2l4ll","level":"info","location":"/k10/?page=Login","msg":"Redirected: no token in X-Forwarded-Access-Token or Authorization","path":"/v0/authz/k10/favicon.ico","spanID":"57a7275f2439c10a","status":307,"time":"2026-06-05T05:55:33.451Z","traceID":"a7e3a1006d4ca84e9b9471bea568ca1d","version":"8.5.11"}
2026/06/05 05:55:33 "GET http://172.22.3.60:31133/k10/favicon.ico HTTP/1.1" from 172.22.3.60:4412 - 307 52B in 1.944522ms
172.22.3.64 - - [05/Jun/2026:05:55:33 +0000] "GET /v0/healthz HTTP/1.1" 301 162 "-" "kube-probe/1.31"
172.22.3.64 - - [05/Jun/2026:05:55:33 +0000] "GET /v0/healthz HTTP/1.1" 301 162 "-" "kube-probe/1.31"
172.22.3.64 - - [05/Jun/2026:05:55:33 +0000] "GET /v0/healthz/ HTTP/1.1" 200 3 "http://192.168.181.82:8000/v0/healthz" "kube-probe/1.31"
172.22.3.64 - - [05/Jun/2026:05:55:33 +0000] "GET /v0/healthz/ HTTP/1.1" 200 3 "http://192.168.181.82:8000/v0/healthz" "kube-probe/1.31"
[0] tcp.0: [[1780638933.321392239, {}], {"File"=>"kasten.io/k10/kio/auth/handlers/ok.go", "Function"=>"kasten.io/k10/kio/auth/handlers.(*OKHandler).ServeHTTP", "Level"=>"info", "Line"=>29, "Message"=>"Authenticated: no auth required", "RequestID"=>"2a60b227-60a3-11f1-bad6-3e4074cddbd0", "Time"=>"2026-06-05T05:55:33.211563299Z", "cluster_name"=>"7eea85a1-9661-44ae-8f2a-049917479af4", "hostname"=>"auth-svc-bb59bc84b-2l4ll", "path"=>"/v0/authz/k10/auth-svc/v0/login", "spanID"=>"c9d72c3a297742f6", "status"=>200, "traceID"=>"c5c90ed2901982ec7192b2dbd5f04153", "version"=>"8.5.11"}]
[1] tcp.0: [[1780638933.321415426, {}], {"File"=>"kasten.io/k10/kio/auth/handlers/redirect.go", "Function"=>"kasten.io/k10/kio/auth/handlers.(*RedirectHandler).ServeHTTP", "Level"=>"info", "Line"=>34, "Message"=>"Redirected: no token in X-Forwarded-Access-Token or Authorization", "RequestID"=>"2a66a5c8-60a3-11f1-bad6-3e4074cddbd0", "Time"=>"2026-06-05T05:55:33.250322268Z", "cluster_name"=>"7eea85a1-9661-44ae-8f2a-049917479af4", "hostname"=>"auth-svc-bb59bc84b-2l4ll", "location"=>"/k10/?page=Login", "path"=>"/v0/authz/k10/", "spanID"=>"24adce4aff8e0745", "status"=>307, "traceID"=>"10185648b2b8f4f451e573b7715946c3", "version"=>"8.5.11"}]
[2] tcp.0: [[1780638933.823382468, {}], {"File"=>"kasten.io/k10/kio/auth/handlers/redirect.go", "Function"=>"kasten.io/k10/kio/auth/handlers.(*RedirectHandler).ServeHTTP", "Level"=>"info", "Line"=>34, "Message"=>"Redirected: no token in X-Forwarded-Access-Token or Authorization", "RequestID"=>"2a839419-60a3-11f1-bad6-3e4074cddbd0", "Time"=>"2026-06-05T05:55:33.440000982Z", "cluster_name"=>"7eea85a1-9661-44ae-8f2a-049917479af4", "hostname"=>"auth-svc-bb59bc84b-2l4ll", "location"=>"/k10/?page=Login", "path"=>"/v0/authz/k10/dashboardbff-svc/v0/upgradeInfo", "spanID"=>"7f32ca2db357deec", "status"=>307, "traceID"=>"f13000b73a6923a97de7221cb924eb4a", "version"=>"8.5.11"}]
[3] tcp.0: [[1780638933.823398201, {}], {"File"=>"kasten.io/k10/kio/auth/handlers/redirect.go", "Function"=>"kasten.io/k10/kio/auth/handlers.(*RedirectHandler).ServeHTTP", "Level"=>"info", "Line"=>34, "Message"=>"Redirected: no token in X-Forwarded-Access-Token or Authorization", "RequestID"=>"2a842399-60a3-11f1-bad6-3e4074cddbd0", "Time"=>"2026-06-05T05:55:33.44356608Z", "cluster_name"=>"7eea85a1-9661-44ae-8f2a-049917479af4", "hostname"=>"auth-svc-bb59bc84b-2l4ll", "location"=>"/k10/?page=Login", "path"=>"/v0/authz/k10/favicon.ico", "spanID"=>"76c9a5ed35c70913", "status"=>307, "traceID"=>"9ea18ae98d831a493d675b1723eeec81", "version"=>"8.5.11"}]
[4] tcp.0: [[1780638933.823402193, {}], {"File"=>"kasten.io/k10/kio/auth/handlers/redirect.go", "Function"=>"kasten.io/k10/kio/auth/handlers.(*RedirectHandler).ServeHTTP", "Level"=>"info", "Line"=>34, "Message"=>"Redirected: no token in X-Forwarded-Access-Token or Authorization", "RequestID"=>"2a8568ce-60a3-11f1-bad6-3e4074cddbd0", "Time"=>"2026-06-05T05:55:33.451933686Z", "cluster_name"=>"7eea85a1-9661-44ae-8f2a-049917479af4", "hostname"=>"auth-svc-bb59bc84b-2l4ll", "location"=>"/k10/?page=Login", "path"=>"/v0/authz/k10/favicon.ico", "spanID"=>"57a7275f2439c10a", "status"=>307, "traceID"=>"a7e3a1006d4ca84e9b9471bea568ca1d", "version"=>"8.5.11"}]GPT 왈: 백엔드까지는 정상적으로 완료 되었지만 메인 페이지에서 차단된거같음 이라고 나옴
https로 해야할거같음..
NGINX 로 설정하기
STEP 1: 사설 인증서 발급
# 1. 인증서를 생성할 임시 공간 이동
mkdir -p ~/kasten_k8s_ssl && cd ~/kasten_k8s_ssl
# 2. OpenSSL로 마스터 노드 IP(172.22.3.60) 기반 인증서 파일 생성
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout tls.key \
-out tls.crt \
-subj "/C=KR/O=DigitalITech/CN=172.22.3.60"
# 3. Kasten 네임스페이스 내부에 쿠버네티스 정식 TLS Secret으로 업로드
kubectl create secret tls kasten-https-secret \
--cert=tls.crt \
--key=tls.key \
-n kasten-io셀프 인증서 부터 만들어 보아요
CN은 마스터 노드 로 해서 인식되게 만들었습니다.
STEP 2 : NGINX 설정 값 백업용 CONFIGMAP
nginx 리버스 프록시 yaml 파일 생성
ubuntu@k8s-master:~/kasten_ssl$ cat nginx.conf
apiVersion: v1
kind: ConfigMap
metadata:
name: nginx-proxy-config
namespace: kasten-io
data:
nginx.conf: |
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
client_max_body_size 1024M;
server {
listen 8443 ssl;
server_name 172.22.3.60;
# 쿠버네티스 Secret이 마운트될 경로
ssl_certificate /etc/nginx/ssl/tls.crt;
ssl_certificate_key /etc/nginx/ssl/tls.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
# 사용자가 IP만 치고 들어왔을 때 /k10/으로 자동 리다이렉트
location = / {
return 301 $scheme://$http_host/k10/;
}
location / {
# Kasten 내부 gateway 서비스 이름과 포트 직접 지정
proxy_pass http://10.102.61.108:80;
# ⭐️ 역슬래시(\) 제거 및 헤더 매핑 수정
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# Kasten 인증용 핵심 헤더 (토큰 유실 방지)
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Port $server_port;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 600s;
}
}
}ubuntu@k8s-master:~/kasten_ssl$ cat NordPort.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: kasten-nginx-proxy
namespace: kasten-io
spec:
replicas: 1
selector:
matchLabels:
app: kasten-nginx-proxy
template:
metadata:
labels:
app: kasten-nginx-proxy
spec:
hostNetwork: true
# ⭐️ 추가 1: 마스터 노드(control-plane)에만 배포되도록 강제 지정
dnsPolicy: ClusterFirstWithHostNet
nodeSelector:
node-role.kubernetes.io/control-plane: ""
# ⭐️ 추가 2: 마스터 노드의 애플리케이션 배포 제한(Taint)을 무시
tolerations:
- operator: Exists
containers:
- name: nginx
image: nginx:stable-alpine
ports:
- containerPort: 443
volumeMounts:
- name: config-volume
mountPath: /etc/nginx/nginx.conf
subPath: nginx.conf
- name: ssl-volume
mountPath: /etc/nginx/ssl
readOnly: true
volumes:
- name: config-volume
configMap:
name: nginx-proxy-config
- name: ssl-volume
secret:
secretName: kasten-https-secret
---
apiVersion: v1
kind: Service
metadata:
name: kasten-nginx-nodeport
namespace: kasten-io
spec:
type: NodePort
ports:
- port: 443
targetPort: 443
nodePort: 32443 # 👈 테스트하기 직관적인 고정 HTTPS NodePort 수동 지정
selector:
app: kasten-nginx-proxy배포 후 완료 함..!
광고
![[kasten] Kasten 온라인 설치](https://valuenlog.com/uploads/2026/10/d48e5808-d321-45c9-a059-dc855beb0bbe.webp)
![[kasten] 스토리지 클래스 스냅샷 연동 에러](https://valuenlog.com/uploads/2026/10/bf1870f1-1118-417e-bf46-a08e07c6c164.webp)


