skywalking Chart Values

The values the skywalking chart defines itself, plus the elasticsearch.* keys its values.yaml ships. Set them with --set key=value or a values file (-f my-values.yaml).

This is not the full accepted surface. Most keys under a subchart alias — banyandb.*, postgresql.*, eck-operator.*, and the elasticsearch.* keys not listed below — are passed straight through to that subchart, and its own values file is the reference. See BanyanDB, PostgreSQL and Elasticsearch.

The exception is the storage connection block. elasticsearch.config.*, banyandb.config.* and postgresql.config.host are this chart‘s own keys — no subchart defines them; _helpers.tpl reads them to build the OAP storage env and the wait-for-storage init container. Looking for them in a subchart’s values file will not find them, so they are tabled below alongside the chart's own values. helm show values chart/skywalking prints the whole merged default set.

Three values have no default and must be set on every install:

namedescriptionexample
oap.image.tagOAP image tag11.0.0
oap.storageTypestorage backendelasticsearch, postgresql, banyandb
ui.image.tagHorizon UI image taghorizon-1.0.0

Two more have no default but are required only when the component that consumes them is enabled. Both fail the render rather than defaulting:

namerequired whenexample
banyandb.image.tagbanyandb.enabled=true — otherwise the subchart is not rendered at all0.11.0
satellite.image.tagsatellite.enabled=true (false by default)v1.3.0

Both components are configurable three ways, and the chart's own values follow that split:

mechanismOAPHorizon UI
env varsoap.env (map), oap.extraEnv (list, so entries may use valueFrom)ui.extraEnv (list)
env vars from a Secretoap.envFromSecret (Deployment and init Job)ui.envFromSecret
a file via ConfigMapoap.configui.config (opt-in)

Prefer the first two for both. The two files are not equivalent: Horizon's image ships a complete /app/horizon.yaml in which every field is a ${HORIZON_*:default} placeholder, so nothing has to be mounted and ui.config replaces a file that already works. OAP reads real files for log4j2.xml and the OAL/MAL rules, which no environment variable can supply, so oap.config is the only route to those. See Configure Horizon and OAP configuration.

Kubernetes resolves envFrom before env, and a later env entry wins over an earlier one of the same name. So a Secret cannot override a variable the chart itself sets — oap.extraEnv / ui.extraEnv, both rendered last, can.

The following table lists the configurable parameters of the Skywalking chart and their default values.

ParameterDescriptionDefault
nameOverrideOverride the chart name used in resource names""
fullnameOverrideOverride the full resource-name prefix outright (the e2e tests set this to skywalking)""
initContainer.imageImage for the chart's wait-for-storage init containerbusybox
initContainer.tagTag for the wait-for-storage init container image1.30
serviceAccounts.oap.createCreate of the OAP service accounttrue
serviceAccounts.oap.nameName of a pre-existing OAP service account, used when serviceAccounts.oap.create is false""
imagePullSecretsImage pull secrets[]
oap.nameOAP deployment nameoap
oap.dynamicConfig.enabledEnable oap dynamic configuration through k8s configmapfalse
oap.dynamicConfig.periodSync period in seconds60
oap.dynamicConfig.configOap dynamic configuration documentation{}
oap.image.repositoryOAP container image nameskywalking.docker.scarf.sh/apache/skywalking-oap-server
oap.image.tagOAP container image tag. Required on every install -- no defaultnull
oap.image.pullPolicyOAP container image pull policyIfNotPresent
oap.ports.grpcOAP grpc port for tracing or metric11800
oap.ports.restOAP http port for the GraphQL query protocol (used by the UI and by swctl). The chart always builds the UI's HORIZON_OAP_QUERY_URL from it12800
oap.ports.adminOAP admin REST port (admin-server, status, inspect, ui-management, dsl-debugging, runtime-rule). Introduced in OAP 11, which enables all of them by default and serves /status/* and /debugging/* here exclusively. Set to null on any OAP 10.x release, where 17128 is the AI-pipeline URI-recognition server instead. The chart sets the UI's HORIZON_OAP_ADMIN_URL only while this port is set17128
oap.ports.zipkin-receiverOAP http port for Zipkin receiver(not exposed by default)not set (commented out in values.yaml)
oap.ports.zipkin-queryOAP http port for querying Zipkin traces and UI(not exposed by default). When set, the chart also gives the UI HORIZON_OAP_ZIPKIN_URL, so the Zipkin trace pages resolvenot set (commented out in values.yaml)
oap.ports.promql / logql / traceql / metricsFurther OAP listeners, each commented out in values.yaml. Any key added under oap.ports becomes both a container port and a Service port, named after the keynot set (commented out in values.yaml)
oap.replicasOAP k8s deployment replicas2
oap.service.typeOAP svc typeClusterIP
oap.service.annotationsOAP svc annotations{}
oap.javaOptsParameters to be added to the JAVA_OPTS environment variable for OAP-Xmx2g -Xms2g
oap.antiAffinityOAP anti-affinity policysoft
oap.nodeAffinityOAP node affinity policy{}
oap.nodeSelectorOAP labels for master pod assignment{}
oap.tolerationsOAP tolerations[]
oap.resourcesOAP node resources requests & limits{} - cpu limit must be an integer
oap.startupProbeConfiguration fields for the startupProbe. values.yaml ships {} and the template renders the fallback shown here; setting the value replaces it wholesale. The default budget (failureThreshold * periodSeconds = 300s) is large enough for OAP to wait in no-init mode while the OAP init Job creates the storage schema.tcpSocket.port: 12800
failureThreshold: 30
periodSeconds: 10
oap.livenessProbeConfiguration fields for the livenessProbetcpSocket.port: 12800
initialDelaySeconds: 5
periodSeconds: 10
oap.readinessProbeConfiguration fields for the readinessProbetcpSocket.port: 12800
initialDelaySeconds: 5
periodSeconds: 10
oap.envOAP environment variables as a plain map (SW_...: value), rendered into both the OAP Deployment and the OAP init Job. A map cannot carry valueFrom — use oap.extraEnv for thatnot set
oap.extraEnvThe same, but a list of whole env entries, so an item may use valueFrom (a secretKeyRef, or the downward API). Rendered into the Deployment and the init Job alike, after the chart's storage env and after oap.env — so an entry repeating one of those names overrides it. The only way to replace a chart-computed value such as SW_DATA_SOURCE_PASSWORD[]
oap.envFromSecretName of a pre-created Secret; every key becomes an env var on the OAP container and on the init Job's container, which needs the same storage credentials. For keys the chart does not set itself — env beats envFrom, and the chart emits SW_ES_PASSWORD for the bundled ES (from the ECK secret) and SW_DATA_SOURCE_PASSWORD on every postgresql install, so those two have to go through oap.extraEnv. A SW_ES_PASSWORD here reaches OAP only against an external ES with elasticsearch.config.password left empty""
oap.podAnnotationsAnnotations applied to all OAP podsnot set (commented out in values.yaml)
oap.configFiles rendered into a ConfigMap and mounted into /skywalking/config, keyed by path (log4j2.xml, oal/core.oal, metadata-service-mapping.yaml). OAP reads these as real files, so unlike Horizon this is the only way to supply them — no env var can{}
oap.secretMountsSecrets to mount into the OAP pod, each {name, secretName, path}[]
oap.securityContextAllows you to set the securityContext for the pod{}
oap.sidecarsExtra sidecar containers to run in the OAP pod (appended to the pod's containers list, rendered through tpl)[]
ui.enabledDeploy the Horizon UI. Set false to skip the UI Deployment, Service, Ingress, PVC — and the ui.config ConfigMap, if one is configured — entirely (useful when an external UI talks to OAP directly)true
ui.nameWeb UI deployment nameui
ui.replicasWeb UI k8s deployment replicas. Keep at 1 unless your ingress provides sticky sessions — the Horizon BFF holds the session table in memory1
ui.image.repositoryHorizon UI container image. Release images: Docker Hub apache/skywalking-ui tagged horizon-x.y.z. Dev images: ghcr.io/apache/skywalking-horizon-uiskywalking.docker.scarf.sh/apache/skywalking-ui
ui.image.tagHorizon UI image tag (required), e.g. horizon-1.0.0. Horizon releases independently of OAP and 1.0.0 works against OAP 10.4.0 and 11.x alike (on 10.x also set HORIZON_TEMPLATES_MODE=readonly and oap.ports.admin=null). The legacy booster UI is not supported — apache/skywalking-ui publishes no 11.x tagnull
ui.image.pullPolicyWeb UI container image pull policyIfNotPresent
ui.nodeAffinityWeb UI node affinity policy{}
ui.nodeSelectorWeb UI labels for pod assignment{}
ui.tolerationsWeb UI tolerations[]
ui.ingress.enabledCreate Ingress for Web UIfalse
ui.ingress.annotationsAssociate annotations to the Ingress{}
ui.ingress.pathAssociate path with the Ingress/
ui.ingress.hostsAssociate hosts with the Ingress[]
ui.ingress.tlsAssociate TLS with the Ingress[]
ui.service.typeWeb UI svc typeClusterIP
ui.service.externalPortexternal port for the service80
ui.service.internalPortinternal port for the service (Horizon BFF binds 8081). One source for three things: the chart passes it to the container as HORIZON_SERVER_PORT, opens the container port page on it, and both probes target page — so the BFF, the port and the probes cannot drift apart8081
ui.service.externalIPsexternal IP addressesnil
ui.service.loadBalancerIPLoad Balancer IP addressnil
ui.service.annotationsKubernetes service annotations{}
ui.service.nodePortNode port when ui.service.type is NodePortnot set (auto-allocated)
ui.service.loadBalancerSourceRangesLimit load balancer source IPs to a list of CIDRs (where available)not set (commented out in values.yaml)
ui.securityContextPod securityContext. The image runs as the non-root horizon user; fsGroup makes mounted volumes group-writable for that userfsGroup: 101
ui.livenessProbeTCP liveness probe. Targets the container's named page port, so it follows ui.service.internalPort instead of pinning a number that can drifttcpSocket.port: page
initialDelaySeconds: 30
periodSeconds: 20
ui.readinessProbeHTTP readiness probe against the named page port; verifies the BFF is up and the auth backend is healthy. /api/auth/health is the only unauthenticated BFF health endpointhttpGet.path: /api/auth/health
httpGet.port: page
initialDelaySeconds: 10
periodSeconds: 10
failureThreshold: 6
ui.persistence.enabledMount a PVC at /data for audit log / setup / alarm state / wire debug log. When false, state lands in the container's writable layer and is lost on pod restartfalse
ui.persistence.existingClaimUse a pre-created PVC; when unset, the chart creates onenot set (commented out in values.yaml)
ui.persistence.storageClassStorage class for the chart-managed PVC (- renders an empty storageClassName)not set (commented out in values.yaml)
ui.persistence.accessModesPVC access modes[ReadWriteOnce]
ui.persistence.sizePVC size1Gi
ui.persistence.annotationsAnnotations applied to the chart-managed PVC{}
ui.resourcesUI node resources requests & limits{}
ui.podAnnotationsAnnotations applied to all UI podsnot set (commented out in values.yaml)
ui.extraEnvEnv vars on the BFF container, as a list, so an entry may use valueFrom. The primary way to configure Horizon: the image‘s horizon.yaml is one ${HORIZON_*:default} placeholder per field, and structured blocks take JSON in a single variable (HORIZON_AUTH_LOCAL_USERS, HORIZON_AUTH_LDAP, HORIZON_AUTH_SSO, HORIZON_RBAC_ROLES, HORIZON_PERFORMANCE, HORIZON_LAYERS_EXCLUDED). The chart itself sets HORIZON_SERVER_PORT and HORIZON_OAP_QUERY_URL always, plus HORIZON_OAP_ADMIN_URL, HORIZON_OAP_ZIPKIN_URL and HORIZON_PUBLIC_URL when their sources are configured; everything else falls through to the image’s own defaults[]
ui.envFromSecretName of a pre-created Secret; every key becomes an env var on the BFF container. Where the secret-bearing fields belong — HORIZON_AUTH_LOCAL_USERS, HORIZON_AUTH_LDAP, HORIZON_AI_API_KEY, HORIZON_OAUTH_SIGNING_KEY, HORIZON_AUDIT_POSTGRES. A Secret is sufficient on its own: no ui.config and no ${VAR} token anywhere""
HORIZON_AUTH_LOCAL_USERSNot a chart value — the env var that creates logins, set through ui.envFromSecret. JSON array: [{"username":"admin","passwordHash":"$argon2id$...","roles":["admin"]}]. There is no built-in admin/admin, and the BFF does not fail closed: with no users it boots, serves the login page and passes the readiness probe, and nobody can log innot set
HORIZON_TEMPLATES_MODEAlso an env var, via ui.extraEnv. live reads/writes dashboard templates through OAP 11's /ui-management/templates* admin REST API; readonly renders the templates bundled in the image and makes the config surface display-only. Set readonly against OAP 10.4.0 — it has no such REST surface, and live blocks every layer-driven page. Changing this needs a BFF restartlive (image default)
HORIZON_PUBLIC_URLPublic base URL operators reach Horizon at; used for SSO callbacks and as the OAuth issuer. Set by the chart from the first ui.ingress.hosts entry when the ingress is enabled and has hosts — https when a ui.ingress.tls block covers that host (an entry with no hosts counts as covering), otherwise http. Override with ui.extraEnvderived, else the image's ""
HORIZON_TRUST_PROXYWhether to believe X-Forwarded-For for the client address in the login audit. Use a hop count (1 = one proxy in front) or the ingress address/CIDR; true is refused at bootfalse (image default)
ui.configOpt-in horizon.yaml. Empty — the default — means no ConfigMap and no mount, and the image‘s own complete file is used. Setting it renders a ConfigMap and mounts it over /app/horizon.yaml, replacing that file: any field you do not write falls back to Horizon’s built-in default, and its HORIZON_* variable stops working unless you write the token yourself (cookieSecure: ${HORIZON_SESSION_COOKIE_SECURE:false}). Three things are merged in for you: the OAP URLs and the ingress-derived publicUrl as tokens, server.port as a literal, and auth.local.users as ${HORIZON_AUTH_LOCAL_USERS:[]} unless you write users of your own — so OAP stays reachable, the BFF keeps binding ui.service.internalPort, and a Secret-supplied login keeps working. Use it only to pin a field regardless of the environment; otherwise prefer ui.extraEnv / ui.envFromSecret. horizon.yaml reference{}
ui.extraVolumesExtra volumes for the UI pod. Needed by the two Horizon settings that take a filesystem path rather than a value: auth.tokensFile / HORIZON_AUTH_TOKENS_FILE (API tokens Secret) and sourceMaps.bootMountDir / HORIZON_SOURCEMAPS_DIR (durable .map files, /app/sourcemaps in the image)[]
ui.extraVolumeMountsExtra volume mounts for the BFF container, paired with ui.extraVolumes[]
oapInit.nodeAffinityOAP init job node affinity policy{}
oapInit.nodeSelectorOAP init job labels for master pod assignment{}
oapInit.tolerationsOAP init job tolerations[]
oapInit.extraPodLabelsOAP init job metadata labels{}
oapInit.ttlSecondsAfterFinishedSeconds after which the finished OAP init Job (and its Pod) is auto-deleted by the Kubernetes TTL-after-finished controller. Empty keeps the Job. Leave empty with GitOps tools (Argo CD/Flux), which would recreate it after deletion.""
satellite.nameSatellite deployment namesatellite
satellite.replicasSatellite k8s deployment replicas1
satellite.enabledIs enable Satellitefalse
satellite.image.repositorySatellite container image nameskywalking.docker.scarf.sh/apache/skywalking-satellite
satellite.image.tagSatellite container image tag. No default; required only when satellite.enabled=true, and the render then fails with satellite.image.tag is requirednull
satellite.image.pullPolicySatellite container image pull policyIfNotPresent
satellite.antiAffinitySatellite anti-affinity policysoft
satellite.nodeAffinitySatellite node affinity policy{}
satellite.nodeSelectorSatellite labels for pod assignment{}
satellite.tolerationsSatellite tolerations[]
satellite.service.typeSatellite svc typeClusterIP
satellite.ports.grpcSatellite grpc port for tracing, metrics, logs, events11800
satellite.ports.prometheusSatellite http port for Prometheus monitoring1234
satellite.resourcesSatellite node resources requests & limits{} - cpu limit must be an integer
satellite.podAnnotationsConfigurable annotations applied to all Satellite podsnot set
satellite.envSatellite environment variablesnot set
satellite.configExtra files written into /skywalking/config (e.g. satellite_config.yaml), keyed by path{}
satellite.ports.pprofSatellite pprof port; enable only when debugging Satellitenot set (commented out in values.yaml)
satellite.securityContextAllows you to set the securityContext for the pod{}

Elasticsearch (ECK)

Elasticsearch is deployed via ECK (Elastic Cloud on Kubernetes). The chart includes the ECK operator and an eck-elasticsearch subchart, both controlled by elasticsearch.enabled. Because Elasticsearch CRDs must exist before the ES custom resource can be created, the ECK operator CRDs need to be installed separately before deploying the chart. See the main README for installation steps.

Top-level parameters

ParameterDescriptionDefault
elasticsearch.enabledDeploy the ECK operator and an ECK-managed Elasticsearch clustertrue
elasticsearch.versionElasticsearch version to deploy8.18.8
elasticsearch.fullnameOverrideOverride the Elasticsearch resource name. The ECK service will be {name}-es-http""
elasticsearch.labelsLabels applied to the Elasticsearch resource{}
elasticsearch.annotationsAnnotations applied to the Elasticsearch resource{}
elasticsearch.httpHTTP layer settings. TLS is disabled by default for OAP connectivitytls.selfSignedCertificate.disabled: true
elasticsearch.secureSettingsSecure settings to inject from Kubernetes secrets[]
elasticsearch.updateStrategyUpdate strategy controlling simultaneous changes{}
elasticsearch.volumeClaimDeletePolicyPolicy for PVC deletion on scale-down or cluster deletion""
elasticsearch.ingress.enabledEnable ingress to expose Elasticsearch externallyfalse
elasticsearch.ingress.annotationsAnnotations on the Elasticsearch Ingress{}
elasticsearch.ingress.hostsHosts for the Elasticsearch Ingress, each {host, path}[{host: chart-example.local, path: /}]
elasticsearch.ingress.tls.enabledEnable TLS on the Elasticsearch Ingress (secretName alongside it)false

External Elasticsearch (when elasticsearch.enabled is false)

ParameterDescriptionDefault
elasticsearch.config.hostElasticsearch hostelasticsearch
elasticsearch.config.port.httpElasticsearch HTTP port9200
elasticsearch.config.userElasticsearch user (optional)""
elasticsearch.config.passwordElasticsearch password (optional)""

Node sets (elasticsearch.nodeSets[])

ECK node sets define the topology of the Elasticsearch cluster. Each entry in the list creates a group of Elasticsearch nodes.

ParameterDescriptionDefault
nodeSets[].nameName of the node setdefault
nodeSets[].countNumber of Elasticsearch nodes in this set3
nodeSets[].configElasticsearch configuration (e.g. node.store.allow_mmap, node.roles)node.store.allow_mmap: false
nodeSets[].volumeClaimTemplatesPersistent storage for Elasticsearch data. Left unset (commented out) in values.yaml, so ECK applies its own default: a 1Gi elasticsearch-data PVC per node on the default StorageClass — enough to start, not to keepnot set

Pod template (elasticsearch.nodeSets[].podTemplate)

The pod template follows standard Kubernetes Pod spec nested under podTemplate.spec. This controls scheduling, resources, init containers, etc.

ParameterDescriptionDefault
podTemplate.metadata.annotationsPod annotations (e.g. iam.amazonaws.com/role){}
podTemplate.metadata.labelsExtra pod labels{}
podTemplate.spec.affinityPod affinity rulesnot set
podTemplate.spec.nodeSelectorNode selector for pod assignmentnot set
podTemplate.spec.tolerationsPod tolerationsnot set
podTemplate.spec.imagePullSecretsImage pull secretsnot set
podTemplate.spec.priorityClassNamePriority class namenot set
podTemplate.spec.terminationGracePeriodSecondsGrace period for pod terminationnot set
podTemplate.spec.initContainersInit containers (e.g. sysctl vm.max_map_count)not set
podTemplate.spec.containers[].resourcesContainer resource requests & limitsrequests: 100m cpu, 2Gi mem
limits: 2Gi mem
podTemplate.spec.containers[].envEnvironment variables (e.g. ES_JAVA_OPTS)not set
podTemplate.spec.containers[].securityContextContainer-level security contextnot set (ECK managed)

BanyanDB

banyandb.enabled is false by default. The keys below are read by this chart's templates in both modes; everything else under banyandb.* belongs to the subchart.

ParameterDescriptionDefault
banyandb.enabledDeploy BanyanDB as a subchart. When false, banyandb.config.* points at an external clusterfalse
banyandb.image.tagBanyanDB server version. A subchart key with no usable default — required once banyandb.enabled=true""
banyandb.config.grpcAddressExternal BanyanDB gRPC address; becomes SW_STORAGE_BANYANDB_TARGETS. Ignored when banyandb.enabled=true — the address is then computed from the subchart Servicebanyandb-grpc:17912
banyandb.config.httpAddressExternal BanyanDB HTTP address, polled by the wait-for-banyandb init container. Same override rulebanyandb-http:17913
banyandb.auth.enabledSend credentials to BanyanDB. Also a subchart key, so it configures both endsfalse
banyandb.auth.usersCredential list; the chart passes users[0] to OAP as SW_STORAGE_BANYANDB_USER / SW_STORAGE_BANYANDB_PASSWORD[{username: admin, password: banyandb}]
banyandb.standalone.enabled / banyandb.cluster.enabledSubchart topology toggles; the chart also reads them to pick the Service ports to wait ontrue / false

PostgreSQL

postgresql.enabled is false by default, and the bundled deployment is a demo — values.yaml turns persistence off on both primary and read replicas.

ParameterDescriptionDefault
postgresql.enabledDeploy the bundled Bitnami PostgreSQL. Not for productionfalse
postgresql.config.hostHostname of your own PostgreSQL. Used only when postgresql.enabled is false; otherwise the host is <release-name>-postgresqlpostgresql-service.your-awesome-company.com
postgresql.containerPorts.postgresqlPort used in SW_JDBC_URL and by the wait-for-postgresql init container5432
postgresql.auth.databaseDatabase name in SW_JDBC_URLskywalking
postgresql.auth.username / postgresql.auth.passwordCredentials OAP connects with (SW_DATA_SOURCE_USER / SW_DATA_SOURCE_PASSWORD)postgres / 123456
postgresql.auth.postgresPasswordSuperuser password for the bundled deployment123456

Specify each parameter with the --set key=value[,key=value] argument to helm install. A bare skywalking is not a chart reference — use a local path or the OCI URL. (The legacy JFrog repo that served the name skywalking/skywalking is frozen at 4.3.0.) From a clone, with the ECK CRDs already installed as their own release:

helm install myrelease chart/skywalking \
  --set oap.image.tag=11.0.0 \
  --set oap.storageType=elasticsearch \
  --set ui.image.tag=horizon-1.0.0 \
  --set eck-operator.installCRDs=false \
  --set nameOverride=my-skywalking

Resource names are built from the release name and nameOverride, so it has to be RFC 1123 lowercase: newSkywalking renders myrelease-newSkywalking-oap, which templates fine and is then rejected by the API server.

Alternatively, put the values in a YAML file:

helm install my-release chart/skywalking -f my-values.yaml

Released versions install from the OCI reference instead — oci://docker.io/apache/skywalking-helm --version <x.y.z>. See Chart sources.

Tip: You can use the default values.yaml

RBAC Configuration

Roles and RoleBindings resources will be created automatically for OAP .

Tip: You can refer to the default oap-role.yaml file in templates to customize your own.

Ingress TLS

If your cluster allows automatic create/retrieve of TLS certificates ( e.g. kube-lego), please refer to the documentation for that mechanism.

To manually configure TLS, first create/retrieve a key & certificate pair for the address(skywalking ui) you wish to protect. Then create a TLS secret in the namespace:

kubectl create secret tls skywalking-tls --cert=path/to/tls.cert --key=path/to/tls.key

Include the secret's name, along with the desired hostnames, in the skywalking-ui Ingress TLS section of your custom values.yaml file:

ui:
  ingress:
    ## If true, Skywalking ui server Ingress will be created
    ##
    enabled: true

    ## Skywalking ui server Ingress hostnames
    ## Must be provided if Ingress is enabled
    ##
    hosts:
      - skywalking

    ## Skywalking ui server Ingress TLS configuration
    ## Secrets must be manually created in the namespace
    ##
    tls:
      - secretName: skywalking
        hosts:
          - skywalking

Envoy ALS

Envoy ALS(access log service) provides fully logs about RPC routed, including HTTP and TCP.

If you want to open envoy ALS, you can do this by modifying values.yaml. default open.

serviceAccounts:
  oap:
    create: true

When envoy als ,will give ServiceAccount clusterrole permission. More envoy als ,please refer to https://github.com/apache/skywalking/blob/master/docs/en/setup/envoy/als_setting.md#observe-service-mesh-through-als