VPC 환경에서 이용 가능합니다.
Ncloud Kubernetes Service(NKS)에서 제공하는 Add-on 목록입니다.
| Add-on | 이름 | 카테고리 | 설명 | Canary 업그레이드 |
|---|---|---|---|---|
nks-csi |
NKS Block Storage CSI | storage | 블록 스토리지를 PersistentVolume으로 사용하는 CSI 드라이버 | 미지원 |
nks-nas-csi |
NKS NAS (NFS) CSI | storage | NAS(NFS) 볼륨을 PersistentVolume으로 사용하는 CSI 드라이버 | 미지원 |
external-dns |
ExternalDNS | network | Service와 Ingress의 DNS 이름을 외부 DNS에 자동으로 등록하고 관리하는 컨트롤러 | 미지원 |
nks-gateway-adapter |
NKS Gateway API Adapter | network | Gateway API 리소스(Gateway, HTTPRoute)를 NAVER Cloud ALB로 연결하는 어댑터 | 미지원 |
istio |
Istio | network | 서비스 간 통신에 트래픽 관리, mTLS 기반 보안, 관측 기능을 제공하는 서비스 메시 컨트롤 플레인 | 지원 |
Add-on을 설치하거나 수정할 때 각 Add-on이 제공하는 설정값을 입력할 수 있습니다. 이 문서는 각 Add-on의 모든 설정 항목의 의미와 예시를 설명합니다. 실제로 지정할 수 있는 설정 항목과 허용 범위는 Add-on의 버전에 따라 달라질 수 있으므로 Add-on 추가 또는 Add-on 수정 팝업 창에서 버전을 선택하면 표시되는 Add-on 구성 스키마를 기준으로 지정해 주십시오.
NKS Block Storage CSI
블록 스토리지를 Kubernetes PersistentVolume으로 사용하는 CSI 드라이버입니다. 이 Add-on을 설치하면 블록 스토리지 기반 볼륨을 동적으로 프로비저닝하고 Pod에 마운트할 수 있습니다.
설치한 다음 사용 방법은 블록 스토리지 CSI 예제를 참조해 주십시오.
설정값
제공하는 설정 항목은 다음과 같습니다.
| 항목 | 설명 | 타입 | 기본값 |
|---|---|---|---|
scheduling.nodeSelector |
컴포넌트를 배치할 노드의 레이블 조건 | 객체(문자열 맵) | 없음 |
scheduling.extraTolerations |
|
배열 | 없음 |
scheduling.extraTolerations[].key |
대상 테인트 키 | 문자열 | 없음 |
scheduling.extraTolerations[].operator |
키와 값을 비교하는 방식. Exists, Equal 중 하나 |
문자열 | 없음 |
scheduling.extraTolerations[].value |
operator가 Equal일 때 비교할 값 |
문자열 | 없음 |
scheduling.extraTolerations[].effect |
대상 테인트의 effect. NoSchedule, PreferNoSchedule, NoExecute 중 하나 |
문자열 | 없음 |
scheduling.extraTolerations[].tolerationSeconds |
effect가 NoExecute일 때 노드에 머무를 시간(초) |
정수 | 없음 |
아래는 예시입니다.
{
"scheduling": {
"nodeSelector": {
"role": "storage"
},
"extraTolerations": [
{
"key": "dedicated",
"operator": "Equal",
"value": "storage",
"effect": "NoSchedule"
}
]
}
}
NKS NAS (NFS) CSI
NAS(NFS) 볼륨을 Kubernetes PersistentVolume으로 사용하는 CSI 드라이버입니다. 여러 Pod가 동시에 접근하는 공유 볼륨이 필요할 때 사용합니다.
설치한 다음 사용 방법은 NAS 볼륨 CSI 예제를 참조해 주십시오.
설정값
제공하는 설정 항목은 다음과 같습니다.
| 항목 | 설명 | 타입 | 기본값 |
|---|---|---|---|
scheduling.nodeSelector |
컴포넌트를 배치할 노드의 레이블 조건 | 객체(문자열 맵) | 없음 |
scheduling.extraTolerations |
|
배열 | 없음 |
scheduling.extraTolerations[].key |
대상 테인트 키 | 문자열 | 없음 |
scheduling.extraTolerations[].operator |
키와 값을 비교하는 방식. Exists, Equal 중 하나. |
문자열 | 없음 |
scheduling.extraTolerations[].value |
operator가 Equal일 때 비교할 값 |
문자열 | 없음 |
scheduling.extraTolerations[].effect |
대상 테인트의 effect. NoSchedule, PreferNoSchedule, NoExecute 중 하나 |
문자열 | 없음 |
scheduling.extraTolerations[].tolerationSeconds |
effect가 NoExecute일 때 노드에 머무를 시간(초) |
정수 | 없음 |
아래는 예시입니다.
{
"scheduling": {
"nodeSelector": {
"role": "storage"
},
"extraTolerations": [
{
"key": "dedicated",
"operator": "Equal",
"value": "storage",
"effect": "NoSchedule"
}
]
}
}
ExternalDNS
Kubernetes의 Service와 Ingress에 설정된 DNS 이름을 외부 DNS 서비스에 자동으로 등록하고 관리하는 컨트롤러입니다. 이 Add-on을 설치하면 워크로드가 노출하는 도메인을 수동으로 관리하지 않아도 됩니다.
설치한 다음 사용 방법은 ExternalDNS 활용 예제를 참조해 주십시오.
설정값
ExternalDNS가 제공하는 설정 항목은 다음과 같습니다.
| 항목 | 설명 | 타입 | 기본값 | 예시 |
|---|---|---|---|---|
sources |
DNS 레코드를 생성할 대상 리소스 종류. service, ingress, crd 중 하나 이상 |
배열 | service, ingress, crd |
["ingress"] |
domainFilter |
|
문자열 | 빈 값 | example.com,foo.io |
annotationFilter |
지정한 애노테이션을 가진 리소스만 처리 대상으로 삼음 | 문자열 | 빈 값 | external-dns.alpha.kubernetes.io/include=true |
labelFilter |
지정한 레이블을 가진 리소스만 처리 대상으로 삼음 | 문자열 | 빈 값 | team=infra |
txtPrefix |
소유권 기록용 TXT 레코드 이름에 붙일 접두사 | 문자열 | _edns. |
_edns. |
txtSuffix |
|
문자열 | 빈 값 | -edns |
policy |
|
문자열 | upsert-only |
sync |
logLevel |
로그 출력 수준. debug, info, warn, error 중 하나 |
문자열 | info |
debug |
credentials.secretName |
|
문자열 | 빈 값 | external-dns-credentials |
scheduling.nodeSelector |
컴포넌트를 배치할 노드의 레이블 조건 | 객체(문자열 맵) | 없음 | {"role":"external-dns"} |
scheduling.extraTolerations |
테인트(taint)가 설정된 노드에도 컴포넌트를 배치하기 위한 toleration 목록 | 배열 | 없음 | — |
scheduling.extraTolerations[].key |
대상 테인트 키 | 문자열 | 없음 | dedicated |
scheduling.extraTolerations[].operator |
키와 값을 비교하는 방식. Exists, Equal 중 하나 |
문자열 | 없음 | Equal |
scheduling.extraTolerations[].value |
operator가 Equal일 때 비교할 값 |
문자열 | 없음 | dns |
scheduling.extraTolerations[].effect |
대상 테인트의 effect. NoSchedule, PreferNoSchedule, NoExecute 중 하나 |
문자열 | 없음 | NoSchedule |
scheduling.extraTolerations[].tolerationSeconds |
effect가 NoExecute일 때 노드에 머무를 시간(초) |
정수 | 없음 | 300 |
아래는 예시입니다.
{
"sources": ["service", "ingress", "crd"],
"domainFilter": "example.com,foo.io",
"annotationFilter": "external-dns.alpha.kubernetes.io/include=true",
"labelFilter": "team=infra",
"txtPrefix": "",
"txtSuffix": "-edns",
"policy": "sync",
"logLevel": "info",
"credentials": {
"secretName": "external-dns-credentials"
},
"scheduling": {
"nodeSelector": {
"role": "external-dns"
},
"extraTolerations": [
{
"key": "dedicated",
"operator": "Equal",
"value": "dns",
"effect": "NoSchedule"
}
]
}
}
NKS Gateway API Adapter
Gateway API 리소스(Gateway, HTTPRoute)를 NAVER Cloud ALB(Application Load Balancer)로 연결하는 어댑터입니다. 이 Add-on을 설치하면 Gateway API 표준 리소스로 외부 트래픽 라우팅을 구성할 수 있습니다.
설치한 다음 사용 방법은 Gateway API 사용을 참조해 주십시오.
설정값
제공하는 설정 항목은 다음과 같습니다.
| 항목 | 설명 | 타입 | 기본값 |
|---|---|---|---|
scheduling.nodeSelector |
컴포넌트를 배치할 노드의 레이블 조건 | 객체(문자열 맵) | 없음 |
scheduling.extraTolerations |
테인트(taint)가 설정된 노드에도 컴포넌트를 배치하기 위한 toleration 목록 | 배열 | 없음 |
scheduling.extraTolerations[].key |
대상 테인트 키. | 문자열 | 없음 |
scheduling.extraTolerations[].operator |
키와 값을 비교하는 방식. Exists, Equal 중 하나 |
문자열 | 없음 |
scheduling.extraTolerations[].value |
operator가 Equal일 때 비교할 값 |
문자열 | 없음 |
scheduling.extraTolerations[].effect |
대상 테인트의 effect. NoSchedule, PreferNoSchedule, NoExecute 중 하나 |
문자열 | 없음 |
scheduling.extraTolerations[].tolerationSeconds |
effect가 NoExecute일 때 노드에 머무를 시간(초) |
정수 | 없음 |
아래는 예시입니다.
{
"scheduling": {
"nodeSelector": {
"role": "gateway"
},
"extraTolerations": [
{
"key": "dedicated",
"operator": "Equal",
"value": "gateway",
"effect": "NoSchedule"
}
]
}
}
Istio
Istio는 클러스터 안의 서비스 간 통신에 트래픽 관리, mTLS 기반 보안, 관측 기능을 제공하는 서비스 메시입니다. 이 Add-on은 Istio의 컨트롤 플레인(istiod)을 설치합니다. 사이드카 주입과 메시 기능의 사용 방법은 Istio 공식 문서를 참조해 주십시오.
이 Add-on은 Canary 업그레이드를 지원합니다. 설치된 버전 계열마다 Revision(예: 버전 1.30.3의 Revision은 1-30)을 가지며, 각 네임스페이스는 istio.io/rev 레이블로 사이드카를 주입받을 Revision을 지정합니다. 업그레이드 절차는 Add-on 설치 및 관리의 Canary 업그레이드를 참조해 주십시오.
설정값
Istio가 제공하는 설정 항목은 다음과 같습니다. meshConfig 항목은 Istio의 메시 설정(MeshConfig)을 그대로 전달하므로, 각 항목의 동작은 Istio MeshConfig 레퍼런스를 참조해 주십시오.
| 항목 | 설명 | 타입 | 기본값 |
|---|---|---|---|
meshConfig.accessLogFile |
|
문자열 | 빈 값 |
meshConfig.accessLogEncoding |
액세스 로그 인코딩. TEXT, JSON 중 하나 |
문자열 | TEXT |
meshConfig.accessLogFormat |
액세스 로그 포맷 문자열. 비우면 Istio 기본 포맷 | 문자열 | 빈 값 |
meshConfig.outboundTrafficPolicy.mode |
메시 외부로 나가는 트래픽 정책. ALLOW_ANY, REGISTRY_ONLY 중 하나 |
문자열 | ALLOW_ANY |
meshConfig.defaultConfig.terminationDrainDuration |
사이드카 종료 시 연결 드레인 대기 시간. 시간 단위 표기(예: 30s) |
문자열 | 5s |
meshConfig.meshMTLS.minProtocolVersion |
메시 mTLS의 최소 TLS 버전. TLS_AUTO, TLSV1_2, TLSV1_3 중 하나 |
문자열 | TLS_AUTO |
meshConfig.defaultHttpRetryPolicy.attempts |
기본 HTTP 재시도 횟수. 0이면 기본 재시도 비활성 |
정수 | 없음 |
meshConfig.defaultHttpRetryPolicy.retryOn |
재시도할 조건(쉼표 구분) | 문자열 | 없음 |
meshConfig.discoverySelectors |
컨트롤 플레인이 감시할 네임스페이스를 한정하는 레이블 셀렉터 목록 | 배열 | 없음 |
meshConfig.discoverySelectors[].matchLabels |
일치해야 하는 레이블 | 객체(문자열 맵) | 없음 |
meshConfig.discoverySelectors[].matchExpressions |
레이블 조건식 목록(key, operator, values). operator는 In, NotIn, Exists, DoesNotExist 중 하나 |
배열 | 없음 |
meshConfig.extensionProviders |
트레이싱 확장 제공자 목록. 항목마다 name과 zipkin 또는 opentelemetry 중 하나를 지정 |
배열 | 없음 |
meshConfig.extensionProviders[].name |
제공자 이름 | 문자열 | 없음 |
meshConfig.extensionProviders[].zipkin.service / .port |
Zipkin 수집기 서비스 주소와 포트 | 문자열 / 정수 | 없음 |
meshConfig.extensionProviders[].opentelemetry.service / .port |
OpenTelemetry 수집기 서비스 주소와 포트 | 문자열/정수 | 없음 |
nodeSelector |
컨트롤 플레인(istiod)을 배치할 노드의 레이블 조건 | 객체(문자열 맵) | 없음 |
tolerations |
|
배열 | 없음 |
tolerations[].key |
대상 테인트 키 | 문자열 | 없음 |
tolerations[].operator |
키와 값을 비교하는 방식. Exists, Equal 중 하나 |
문자열 | 없음 |
tolerations[].value |
operator가 Equal일 때 비교할 값 |
문자열 | 없음 |
tolerations[].effect |
대상 테인트의 effect. NoSchedule, PreferNoSchedule, NoExecute 중 하나 |
문자열 | 없음 |
tolerations[].tolerationSeconds |
effect가 NoExecute일 때 노드에 머무를 시간(초) |
정수 | 없음 |
아래는 예시입니다.
{
"meshConfig": {
"accessLogFile": "/dev/stdout",
"accessLogEncoding": "JSON",
"outboundTrafficPolicy": { "mode": "REGISTRY_ONLY" },
"meshMTLS": { "minProtocolVersion": "TLSV1_2" },
"extensionProviders": [
{
"name": "otel",
"opentelemetry": {
"service": "otel-collector.observability.svc.cluster.local",
"port": 4317
}
}
]
},
"nodeSelector": { "role": "mesh" },
"tolerations": [
{ "key": "dedicated", "operator": "Equal", "value": "mesh", "effect": "NoSchedule" }
]
}
설정값은 설치된 버전(Revision)의 컨트롤 플레인에 적용됩니다. Canary 업그레이드를 시작할 때 새 버전에 적용할 설정값을 지정하면 현재 설정값을 대체합니다.
Canary 업그레이드와 워크로드 전환
Canary 업그레이드를 시작하면 새 Revision의 컨트롤 플레인이 기존 Revision과 함께 설치됩니다. 워크로드는 네임스페이스의 istio.io/rev 레이블에 지정된 Revision을 계속 사용하므로, 레이블을 새 Revision으로 변경하고 워크로드를 재기동하면 재기동된 Pod부터 새 Revision의 사이드카로 동작합니다. 영향 범위가 작은 네임스페이스부터 순차적으로 전환하며 정상 동작을 확인해 주십시오.
# 네임스페이스를 새 revision(예: 1-30)으로 전환
kubectl label namespace <namespace> istio.io/rev=1-30 --overwrite
# 워크로드 재기동 (재기동된 Pod부터 새 revision 적용)
kubectl rollout restart deployment -n <namespace>
문제가 발견되면 레이블을 기존 Revision으로 되돌리고 다시 재기동하면 기존 Revision으로 복귀합니다.
확정하면 기존 Revision의 컨트롤 플레인이 제거됩니다. 기존 Revision 레이블이 남아 있는 네임스페이스에서는 이후 재기동되는 Pod에 사이드카가 주입되지 않으므로, 확정 전에 모든 네임스페이스의 레이블을 새 Revision으로 전환해 주십시오. 취소할 때는 반대로 새 Revision으로 전환한 네임스페이스를 기존 Revision으로 되돌린 다음 진행해 주십시오.
Revision 기반 업그레이드의 자세한 동작은 Istio 공식 문서의 Canary 업그레이드를 참조해 주십시오.
버전 호환
설치할 수 있는 Add-on의 버전은 클러스터의 Kubernetes 버전에 따라 달라집니다. 설치와 수정 시 클러스터와 호환되는 버전만 선택할 수 있습니다. Add-on별 지원 버전은 Add-on 버전의 버전 호환 표를 참조해 주십시오.