Available in VPC
The following add-ons are provided by Ncloud Kubernetes Service (NKS).
| Add-on | Name | Category | Description | Canary upgrade |
|---|---|---|---|---|
nks-csi |
NKS Block Storage CSI | storage | CSI driver for using block storage as a PersistentVolume | Not supported |
nks-nas-csi |
NKS NAS (NFS) CSI | storage | CSI driver for using NAS (NFS) volume as a PersistentVolume | Not supported |
external-dns |
ExternalDNS | network | Controller that automatically registers and manages DNS names for Services and Ingresses in external DNS | Not supported |
nks-gateway-adapter |
NKS Gateway API Adapter | network | Adapter that connects Gateway API resources (Gateway, HTTPRoute) to NAVER Cloud ALB | Not supported |
istio |
Istio | network | Service mesh control plane that provides traffic management, mTLS-based security, and observability for service-to-service communication | Supported |
When installing or editing an add-on, you can enter the settings provided by each add-on. This document describes all settings available for each add-on, including their meanings and examples. The settings you can actually specify and their allowed ranges may vary depending on the add-on version, so specify them based on the add-on configuration schema displayed when you select a version in the Add add-on or Edit add-on popup.
NKS Block Storage CSI
This CSI driver uses block storage as a Kubernetes PersistentVolume. Installing this add-on allows you to dynamically provision block storage-based volumes and mount them to pods.
After installation, see the Block Storage CSI examples for usage instructions.
Settings
The available settings are as follows.
| Item | Description | Type | Default |
|---|---|---|---|
scheduling.nodeSelector |
Node label conditions for deploying components. | Object (string map) | N/A |
scheduling.extraTolerations |
|
Array | N/A |
scheduling.extraTolerations[].key |
Target taint key. | String | N/A |
scheduling.extraTolerations[].operator |
Method for comparing the key and value. Either Exists or Equal. |
String | N/A |
scheduling.extraTolerations[].value |
Value to compare when the operator is Equal. |
String | N/A |
scheduling.extraTolerations[].effect |
Effect of the target taint. One of NoSchedule, PreferNoSchedule, or NoExecute. |
String | N/A |
scheduling.extraTolerations[].tolerationSeconds |
Time in seconds to remain on the node when the effect is NoExecute. |
Integer | N/A |
The following is an example.
{
"scheduling": {
"nodeSelector": {
"role": "storage"
},
"extraTolerations": [
{
"key": "dedicated",
"operator": "Equal",
"value": "storage",
"effect": "NoSchedule"
}
]
}
}
NKS NAS (NFS) CSI
This CSI driver uses NAS (NFS) volume as Kubernetes PersistentVolume. Use it when you need a shared volume that multiple pods can access simultaneously.
After installation, see the NAS volume CSI examples for usage instructions.
Settings
The available settings are as follows.
| Item | Description | Type | Default |
|---|---|---|---|
scheduling.nodeSelector |
Node label conditions for deploying components. | Object (string map) | N/A |
scheduling.extraTolerations |
|
Array | N/A |
scheduling.extraTolerations[].key |
Target taint key. | String | N/A |
scheduling.extraTolerations[].operator |
Method for comparing the key and value. Either Exists or Equal. |
String | N/A |
scheduling.extraTolerations[].value |
Value to compare when the operator is Equal. |
String | N/A |
scheduling.extraTolerations[].effect |
Effect of the target taint. One of NoSchedule, PreferNoSchedule, or NoExecute. |
String | N/A |
scheduling.extraTolerations[].tolerationSeconds |
Time in seconds to remain on the node when the effect is NoExecute. |
Integer | N/A |
The following is an example.
{
"scheduling": {
"nodeSelector": {
"role": "storage"
},
"extraTolerations": [
{
"key": "dedicated",
"operator": "Equal",
"value": "storage",
"effect": "NoSchedule"
}
]
}
}
ExternalDNS
This controller automatically registers and manages DNS names configured for Kubernetes Services and Ingresses with an external DNS service. Installing this add-on eliminates the need to manually manage domains exposed by workloads.
After installation, see the ExternalDNS use cases for usage instructions.
Settings
The settings provided by ExternalDNS are as follows.
| Item | Description | Type | Default | Example |
|---|---|---|---|---|
sources |
Resource types for which DNS records are created. 1 or more of service, ingress, and crd. |
Array | service, ingress, crd |
["ingress"] |
domainFilter |
|
String | Empty | example.com,foo.io |
annotationFilter |
Process only resources with the specified annotation. | String | Empty | external-dns.alpha.kubernetes.io/include=true |
labelFilter |
Process only resources with the specified label. | String | Empty | team=infra |
txtPrefix |
Prefix added to TXT record names used for ownership tracking. | String | _edns. |
_edns. |
txtSuffix |
|
String | Empty | -edns |
policy |
|
String | upsert-only |
sync |
logLevel |
Log output level. One of debug, info, warn, or error. |
String | info |
debug |
credentials.secretName |
|
String | Empty | external-dns-credentials |
scheduling.nodeSelector |
Node label conditions for deploying components. | Object (string map) | N/A | {"role":"external-dns"} |
scheduling.extraTolerations |
List of tolerations for deploying components to nodes with taints. | Array | N/A | — |
scheduling.extraTolerations[].key |
Target taint key. | String | N/A | dedicated |
scheduling.extraTolerations[].operator |
Method for comparing the key and value. Either Exists or Equal. |
String | N/A | Equal |
scheduling.extraTolerations[].value |
Value to compare when the operator is Equal. |
String | N/A | dns |
scheduling.extraTolerations[].effect |
Effect of the target taint. One of NoSchedule, PreferNoSchedule, or NoExecute. |
String | N/A | NoSchedule |
scheduling.extraTolerations[].tolerationSeconds |
Time in seconds to remain on the node when the effect is NoExecute. |
Integer | N/A | 300 |
The following is an example.
{
"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
This adapter connects Gateway API resources (Gateway, HTTPRoute) to NAVER Cloud Application Load Balancer (ALB). Installing this add-on allows you to configure external traffic routing using standard Gateway API resources.
After installation, see Using Gateway API for usage instructions.
Settings
The available settings are as follows.
| Item | Description | Type | Default |
|---|---|---|---|
scheduling.nodeSelector |
Node label conditions for deploying components. | Object (string map) | N/A |
scheduling.extraTolerations |
List of tolerations for deploying components to nodes with taints. | Array | N/A |
scheduling.extraTolerations[].key |
Target taint key. | String | N/A |
scheduling.extraTolerations[].operator |
Method for comparing the key and value. Either Exists or Equal. |
String | N/A |
scheduling.extraTolerations[].value |
Value to compare when the operator is Equal. |
String | N/A |
scheduling.extraTolerations[].effect |
Effect of the target taint. One of NoSchedule, PreferNoSchedule, or NoExecute. |
String | N/A |
scheduling.extraTolerations[].tolerationSeconds |
Time in seconds to remain on the node when the effect is NoExecute. |
Integer | N/A |
The following is an example.
{
"scheduling": {
"nodeSelector": {
"role": "gateway"
},
"extraTolerations": [
{
"key": "dedicated",
"operator": "Equal",
"value": "gateway",
"effect": "NoSchedule"
}
]
}
}
Istio
Istio is a service mesh that provides traffic management, mTLS-based security, and observability for service-to-service communication within a cluster. This add-on installs the Istio control plane (istiod). For information on sidecar injection and using mesh features, see the official Istio documentation.
This add-on supports Canary upgrades. Each installed version line has a Revision (e.g., the Revision of version 1.30.3 is 1-30), and each namespace uses the istio.io/rev label to specify the Revision whose sidecars are injected into it. For the upgrade procedure, see Canary upgrade in Add-on installation and management.
Settings
The settings provided by Istio are as follows. The meshConfig field passes Istio's mesh configuration (MeshConfig) as is. For the behavior of each field, see the Istio MeshConfig reference.
| Item | Description | Type | Default |
|---|---|---|---|
meshConfig.accessLogFile |
|
String | Empty |
meshConfig.accessLogEncoding |
Access log encoding. Either TEXT or JSON. |
String | TEXT |
meshConfig.accessLogFormat |
Access log format string. If empty, the Istio default format is used. | String | Empty |
meshConfig.outboundTrafficPolicy.mode |
Policy for traffic leaving the mesh. Either ALLOW_ANY or REGISTRY_ONLY. |
String | ALLOW_ANY |
meshConfig.defaultConfig.terminationDrainDuration |
Connection drain wait time when the sidecar terminates. Specified with a time unit (e.g., 30s). |
String | 5s |
meshConfig.meshMTLS.minProtocolVersion |
Minimum TLS version for mesh mTLS. One of TLS_AUTO, TLSV1_2, or TLSV1_3. |
String | TLS_AUTO |
meshConfig.defaultHttpRetryPolicy.attempts |
Default number of HTTP retries. If 0, default retries are disabled. |
Integer | N/A |
meshConfig.defaultHttpRetryPolicy.retryOn |
Conditions for retrying (comma-separated). | String | N/A |
meshConfig.discoverySelectors |
List of label selectors that limit the namespaces watched by the control plane. | Array | N/A |
meshConfig.discoverySelectors[].matchLabels |
Labels that must match. | Object (string map) | N/A |
meshConfig.discoverySelectors[].matchExpressions |
List of label expressions (key, operator, values). operator is one of In, NotIn, Exists, or DoesNotExist. |
Array | N/A |
meshConfig.extensionProviders |
List of tracing extension providers. For each item, specify name and either zipkin or opentelemetry. |
Array | N/A |
meshConfig.extensionProviders[].name |
Provider name. | String | N/A |
meshConfig.extensionProviders[].zipkin.service / .port |
Zipkin collector service address and port. | String/Integer | N/A |
meshConfig.extensionProviders[].opentelemetry.service / .port |
OpenTelemetry collector service address and port. | String/Integer | N/A |
nodeSelector |
Label conditions for the nodes on which to deploy the control plane (istiod) on. | Object (string map) | N/A |
tolerations |
|
Array | N/A |
tolerations[].key |
Target taint key. | String | N/A |
tolerations[].operator |
Method for comparing the key and value. Either Exists or Equal. |
String | N/A |
tolerations[].value |
Value to compare when the operator is Equal. |
String | N/A |
tolerations[].effect |
Effect of the target taint. One of NoSchedule, PreferNoSchedule, or NoExecute. |
String | N/A |
tolerations[].tolerationSeconds |
Time in seconds to remain on the node when the effect is NoExecute. |
Integer | N/A |
The following is an example.
{
"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" }
]
}
Settings are applied to the control plane of the installed version (Revision). If you specify settings to apply to the new version when starting a Canary upgrade, they replace the current settings.
Canary upgrade and workload migration
When you start a Canary upgrade, the control plane of the new Revision is installed alongside the existing Revision. Workloads continue to use the Revision specified in the namespace's istio.io/rev label. If you change the label to the new Revision and restart the workloads, the restarted pods run with sidecars of the new Revision. Migrate namespaces sequentially, starting with those that have the smallest impact, and verify that they work properly.
# Switch the namespace to the new revision (e.g., 1-30)
kubectl label namespace <namespace> istio.io/rev=1-30 --overwrite
# Restart workloads (the new revision applies starting with restarted pods)
kubectl rollout restart deployment -n <namespace>
If issues are found, revert the label to the existing Revision and restart the workloads again to return to the existing Revision.
Confirming removes the control plane of the existing Revision. In namespaces where the existing Revision label remains, sidecars are not injected into pods restarted afterward, so switch the labels of all namespaces to the new Revision before confirming. When canceling, revert the namespaces switched to the new Revision back to the existing Revision before proceeding.
For details on how Revision-based upgrades work, see Canary upgrades in the official Istio documentation.
Version compatibility
The add-on versions available for installation vary depending on the cluster's Kubernetes version. When installing or editing an add-on, only versions compatible with the cluster can be selected. For the supported versions of each add-on, see the version compatibility table in Add-on version.