NAIS Application example YAML¶
This is a complete example of an Application
resource, commonly known as the nais.yaml
file.
For an in-depth explanation of each field, head over to the reference documentation.
apiVersion: nais.io/v1alpha1
kind: Application
metadata:
creationTimestamp: null
labels:
team: myteam
name: myapplication
namespace: myteam
spec:
accessPolicy:
inbound:
rules:
- application: app1
- application: app2
namespace: q1
- application: app3
cluster: dev-gcp
namespace: q2
- application: '*'
namespace: q3
- application: app4
permissions:
scopes:
- custom-scope
- application: app5
permissions:
roles:
- custom-role
- application: app6
permissions:
roles:
- custom-role
scopes:
- custom-scope
outbound:
external:
- host: external-application.example.com
- host: non-http-service.example.com
ports:
- port: 9200
- ipv4: 1.2.3.4
- host: non-http-service.example.com
ports:
- port: 9200
rules:
- application: app1
- application: app2
namespace: q1
- application: app3
cluster: dev-gcp
namespace: q2
- application: '*'
namespace: q3
azure:
application:
allowAllUsers: true
claims:
groups:
- id: 00000000-0000-0000-0000-000000000000
enabled: true
tenant: nav.no
sidecar:
autoLogin: true
autoLoginIgnorePaths:
- /path
- /internal/*
enabled: true
resources:
limits:
cpu: 250m
memory: 256Mi
requests:
cpu: 20m
memory: 32Mi
command:
- /app/myapplication
- --param
- value
- --other-param
- other-value
env:
- name: MY_CUSTOM_VAR
value: some_value
- name: MY_APPLICATION_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
envFrom:
- secret: my-secret-with-envs
- configmap: my-configmap-with-envs
filesFrom:
- configmap: example-files-configmap
mountPath: /var/run/configmaps
- mountPath: /var/run/secrets
secret: my-secret-file
- emptyDir:
medium: Memory
mountPath: /var/cache
- mountPath: /var/run/pvc
persistentVolumeClaim: pvc-name
frontend:
generatedConfig:
mountPath: /usr/share/nginx/html/js/nais.js
gcp:
bigQueryDatasets:
- cascadingDelete: true
description: Contains big data, supporting big queries, for use in big ideas.
name: my_bigquery_dataset1
permission: READWRITE
- description: Contains big data, supporting big queries, for use in big ideas.
name: my_bigquery_dataset2
permission: READ
buckets:
- cascadingDelete: true
lifecycleCondition:
age: 10
createdBefore: "2020-01-01"
numNewerVersions: 2
withState: ARCHIVED
name: my-cloud-storage-bucket
publicAccessPrevention: true
retentionPeriodDays: 30
uniformBucketLevelAccess: true
permissions:
- resource:
apiVersion: resourcemanager.cnrm.cloud.google.com/v1beta1
kind: Project
name: myteam-dev-ab23
role: roles/cloudsql.client
sqlInstances:
- autoBackupHour: 1
cascadingDelete: true
collation: nb_NO.UTF8
databases:
- envVarPrefix: DB
name: mydatabase
users:
- name: extra_user
diskAutoresize: true
diskAutoresizeLimit: 60
diskSize: 30
diskType: SSD
flags:
- name: max_connections
value: "50"
highAvailability: true
insights:
enabled: true
queryStringLength: 4500
recordApplicationTags: true
recordClientAddress: true
maintenance:
day: 1
hour: 4
name: myinstance
pointInTimeRecovery: true
retainedBackups: 14
tier: db-f1-micro
transactionLogRetentionDays: 3
type: POSTGRES_12
idporten:
enabled: true
sidecar:
autoLogin: true
autoLoginIgnorePaths:
- /path
- /internal/*
enabled: true
level: idporten-loa-high
locale: nb
resources:
limits:
cpu: 250m
memory: 256Mi
requests:
cpu: 20m
memory: 32Mi
image: navikt/testapp:69.0.0
influx:
instance: influx-instance
ingresses:
- https://myapplication.nav.no
kafka:
pool: nav-dev
streams: true
leaderElection: true
liveness:
failureThreshold: 10
initialDelay: 20
path: /isalive
periodSeconds: 5
port: 8080
timeout: 1
logformat: accesslog_with_referer_useragent
login:
enforce:
enabled: true
excludePaths:
- /some/path
- /api/**
provider: openid
logtransform: http_loglevel
maskinporten:
enabled: true
scopes:
consumes:
- name: skatt:scope.read
exposes:
- accessibleForAll: true
allowedIntegrations:
- maskinporten
atMaxAge: 30
consumers:
- name: KST
orgno: "123456789"
delegationSource: delegation-source
enabled: true
name: scope.read
product: arbeid
separator: ':'
observability:
autoInstrumentation:
destinations:
- id: my-destination
enabled: true
runtime: java
logging:
destinations:
- id: my-destination
enabled: true
tracing:
enabled: true
openSearch:
access: readwrite
instance: my-open-search-instance
port: 8080
preStopHook:
exec:
command:
- ./my
- --shell
- script
http:
path: /internal/stop
port: 8080
preStopHookPath: /internal/stop
prometheus:
enabled: true
path: /metrics
port: "8080"
readiness:
failureThreshold: 10
initialDelay: 20
path: /isready
periodSeconds: 5
port: 8080
timeout: 1
redirects:
- from: https://myapplication-old.nav.no
to: https://myapplication.nav.no
redis:
- access: readwrite
instance: cache
replicas:
cpuThresholdPercentage: 50
disableAutoScaling: true
max: 4
min: 2
scalingStrategy:
cpu:
thresholdPercentage: 50
kafka:
consumerGroup: dev-gcp
threshold: 10
topic: nais-verification.kafka-canary-dev-gcp
resources:
limits:
cpu: 500m
memory: 512Mi
requests:
cpu: 200m
memory: 256Mi
secureLogs:
enabled: true
service:
port: 80
protocol: http
skipCaBundle: true
startup:
failureThreshold: 10
initialDelay: 20
path: /started
periodSeconds: 5
port: 8080
timeout: 1
strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 0
type: RollingUpdate
terminationGracePeriodSeconds: 60
tokenx:
enabled: true
mountSecretsAsFilesOnly: true
ttl: 1h
vault:
enabled: true
paths:
- format: env
kvPath: /kv/preprod/fss/application/namespace
mountPath: /var/run/secrets/nais.io/vault
webproxy: true
status: {}