harbor init
This commit is contained in:
parent
d315d375e1
commit
a08d78a154
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,28 @@
|
|||
# Offloading setting.
|
||||
apiVersion: networking.k8s.io/v1
|
||||
kind: Ingress
|
||||
metadata:
|
||||
name: ing-argocd
|
||||
namespace: argocd
|
||||
annotations:
|
||||
#nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
|
||||
nginx.ingress.kubernetes.io/backend-protocol: "https"
|
||||
nginx.ingress.kubernetes.io/ssl-passthrough: "true"
|
||||
spec:
|
||||
ingressClassName: nginx
|
||||
rules:
|
||||
- host: argocd.inje-private.com # 사전 생성된 인증서의 도메인적용.
|
||||
http:
|
||||
paths:
|
||||
- path: /
|
||||
pathType: Prefix
|
||||
backend:
|
||||
service:
|
||||
name: argocd-server
|
||||
port:
|
||||
number: 443
|
||||
tls:
|
||||
- hosts:
|
||||
- "argocd.inje-private.com.com"
|
||||
secretName: argocd-ssl
|
||||
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
# kustomization.yaml
|
||||
namespace: argocd
|
||||
|
||||
resources:
|
||||
- argocd_v2.12.3.yaml
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
# Warning
|
||||
# PersistentVolumeClaim 오브젝트에서 StorageClass 이름을 변경하고 사용.
|
||||
#
|
||||
apiVersion: v1
|
||||
kind: Namespace
|
||||
metadata:
|
||||
labels:
|
||||
kubernetes.io/metadata.name: nexus
|
||||
name: nexus
|
||||
spec:
|
||||
finalizers:
|
||||
- kubernetes
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: ServiceAccount
|
||||
metadata:
|
||||
labels:
|
||||
app.kubernetes.io/instance: nexus
|
||||
app.kubernetes.io/name: nexus-repository-manager
|
||||
app.kubernetes.io/version: 3.72.0
|
||||
name: nexus-nexus-repository-manager
|
||||
namespace: nexus
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
labels:
|
||||
app.kubernetes.io/instance: nexus
|
||||
app.kubernetes.io/name: nexus-repository-manager
|
||||
app.kubernetes.io/version: 3.72.0
|
||||
name: nexus-nexus-repository-manager-data
|
||||
namespace: nexus
|
||||
spec:
|
||||
accessModes:
|
||||
- ReadWriteMany
|
||||
resources:
|
||||
requests:
|
||||
storage: 50Gi
|
||||
storageClassName: sc-monitoring
|
||||
|
|
@ -0,0 +1,96 @@
|
|||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
labels:
|
||||
app.kubernetes.io/instance: nexus
|
||||
app.kubernetes.io/name: nexus-repository-manager
|
||||
app.kubernetes.io/version: 3.62.0
|
||||
name: nexus-nexus-repository-manager
|
||||
namespace: nexus
|
||||
spec:
|
||||
ports:
|
||||
- name: nexus-ui
|
||||
port: 8081
|
||||
protocol: TCP
|
||||
selector:
|
||||
app.kubernetes.io/instance: nexus
|
||||
app.kubernetes.io/name: nexus-repository-manager
|
||||
type: ClusterIP
|
||||
---
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
labels:
|
||||
app.kubernetes.io/instance: nexus
|
||||
app.kubernetes.io/name: nexus-repository-manager
|
||||
app.kubernetes.io/version: 3.62.0
|
||||
name: nexus-nexus-repository-manager
|
||||
namespace: nexus
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app.kubernetes.io/instance: nexus
|
||||
app.kubernetes.io/name: nexus-repository-manager
|
||||
strategy:
|
||||
type: Recreate
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app.kubernetes.io/instance: nexus
|
||||
app.kubernetes.io/name: nexus-repository-manager
|
||||
spec:
|
||||
containers:
|
||||
- env:
|
||||
- name: INSTALL4J_ADD_VM_PARAMS
|
||||
value: "-Xms2703M -Xmx2703M -XX:MaxDirectMemorySize=2703M -XX:+UnlockExperimentalVMOptions -Djava.util.prefs.userRoot=/nexus-data/javaprefs"
|
||||
- name: NEXUS_SECURITY_RANDOMPASSWORD
|
||||
value: "true"
|
||||
envFrom: null
|
||||
image: reg.inje-private.com/nnd002/sonatype/nexus3:3.72.0
|
||||
imagePullPolicy: IfNotPresent
|
||||
lifecycle: null
|
||||
livenessProbe:
|
||||
failureThreshold: 6
|
||||
httpGet:
|
||||
path: /
|
||||
port: 8081
|
||||
initialDelaySeconds: 30
|
||||
periodSeconds: 30
|
||||
timeoutSeconds: 10
|
||||
name: nexus-repository-manager
|
||||
ports:
|
||||
- containerPort: 8081
|
||||
name: nexus-ui
|
||||
readinessProbe:
|
||||
failureThreshold: 6
|
||||
httpGet:
|
||||
path: /
|
||||
port: 8081
|
||||
initialDelaySeconds: 30
|
||||
periodSeconds: 30
|
||||
timeoutSeconds: 10
|
||||
#resources: # by ljh
|
||||
#limits:
|
||||
#cpu: 4
|
||||
securityContext:
|
||||
allowPrivilegeEscalation: false
|
||||
capabilities:
|
||||
drop:
|
||||
- ALL
|
||||
runAsNonRoot: true
|
||||
seccompProfile:
|
||||
type: RuntimeDefault
|
||||
volumeMounts:
|
||||
- mountPath: /nexus-data
|
||||
name: nexus-repository-manager-data
|
||||
securityContext:
|
||||
fsGroup: 200
|
||||
runAsGroup: 200
|
||||
runAsUser: 200
|
||||
serviceAccountName: nexus-nexus-repository-manager
|
||||
terminationGracePeriodSeconds: 120
|
||||
volumes:
|
||||
- name: nexus-repository-manager-data
|
||||
persistentVolumeClaim:
|
||||
claimName: nexus-nexus-repository-manager-data
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
apiVersion: networking.k8s.io/v1
|
||||
kind: Ingress
|
||||
metadata:
|
||||
annotations:
|
||||
nginx.ingress.kubernetes.io/proxy-body-size: "0"
|
||||
name: ing-nexus
|
||||
namespace: nexus
|
||||
spec:
|
||||
ingressClassName: nginx
|
||||
rules:
|
||||
- host: nexus.inje-private.com
|
||||
http:
|
||||
paths:
|
||||
- backend:
|
||||
service:
|
||||
name: nexus-nexus-repository-manager
|
||||
port:
|
||||
name: nexus-ui
|
||||
path: /
|
||||
pathType: Prefix
|
||||
tls:
|
||||
- hosts:
|
||||
- "nexus.inje-private.com"
|
||||
secretName: nexus-ssl
|
||||
|
|
@ -0,0 +1,618 @@
|
|||
apiVersion: v1
|
||||
kind: Namespace
|
||||
metadata:
|
||||
labels:
|
||||
kubernetes.io/metadata.name: sonarqube
|
||||
name: sonarqube
|
||||
spec:
|
||||
finalizers:
|
||||
- kubernetes
|
||||
---
|
||||
# Source: sonarqube/charts/postgresql/templates/secrets.yaml
|
||||
apiVersion: v1
|
||||
kind: Secret
|
||||
metadata:
|
||||
name: sonarqube-postgresql
|
||||
namespace: sonarqube
|
||||
labels:
|
||||
app.kubernetes.io/name: postgresql
|
||||
helm.sh/chart: postgresql-10.15.0
|
||||
app.kubernetes.io/instance: sonarqube
|
||||
app.kubernetes.io/managed-by: Helm
|
||||
namespace: sonarqube
|
||||
type: Opaque
|
||||
data:
|
||||
postgresql-postgres-password: "YjlLdzZzWVlYOQ=="
|
||||
postgresql-password: "c29uYXJQYXNz"
|
||||
---
|
||||
# Source: sonarqube/templates/secret.yaml
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Secret
|
||||
metadata:
|
||||
name: sonarqube-sonarqube-monitoring-passcode
|
||||
namespace: sonarqube
|
||||
labels:
|
||||
app: sonarqube
|
||||
chart: sonarqube-10.6.0_3033
|
||||
release: sonarqube
|
||||
heritage: Helm
|
||||
type: Opaque
|
||||
data:
|
||||
SONAR_WEB_SYSTEMPASSCODE: "ZGVmaW5lX2l0"
|
||||
---
|
||||
# Source: sonarqube/templates/config.yaml
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: sonarqube-sonarqube-config
|
||||
namespace: sonarqube
|
||||
labels:
|
||||
app: sonarqube
|
||||
chart: sonarqube-10.6.0_3033
|
||||
release: sonarqube
|
||||
heritage: Helm
|
||||
data:
|
||||
sonar.properties: |
|
||||
---
|
||||
# Source: sonarqube/templates/init-fs.yaml
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: sonarqube-sonarqube-init-fs
|
||||
namespace: sonarqube
|
||||
labels:
|
||||
app: sonarqube
|
||||
chart: sonarqube-10.6.0_3033
|
||||
release: sonarqube
|
||||
heritage: Helm
|
||||
data:
|
||||
init_fs.sh: |-
|
||||
---
|
||||
# Source: sonarqube/templates/init-sysctl.yaml
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: sonarqube-sonarqube-init-sysctl
|
||||
namespace: sonarqube
|
||||
labels:
|
||||
app: sonarqube
|
||||
chart: sonarqube-10.6.0_3033
|
||||
release: sonarqube
|
||||
heritage: Helm
|
||||
data:
|
||||
init_sysctl.sh: |-
|
||||
if [[ "$(sysctl -n vm.max_map_count)" -lt 524288 ]]; then
|
||||
sysctl -w vm.max_map_count=524288
|
||||
fi
|
||||
if [[ "$(sysctl -n fs.file-max)" -lt 131072 ]]; then
|
||||
sysctl -w fs.file-max=131072
|
||||
fi
|
||||
if [[ "$(ulimit -n)" != "unlimited" ]]; then
|
||||
if [[ "$(ulimit -n)" -lt 131072 ]]; then
|
||||
echo "ulimit -n 131072"
|
||||
ulimit -n 131072
|
||||
fi
|
||||
fi
|
||||
if [[ "$(ulimit -u)" != "unlimited" ]]; then
|
||||
if [[ "$(ulimit -u)" -lt 8192 ]]; then
|
||||
echo "ulimit -u 8192"
|
||||
ulimit -u 8192
|
||||
fi
|
||||
fi
|
||||
---
|
||||
# Source: sonarqube/templates/install-plugins.yaml
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: sonarqube-sonarqube-install-plugins
|
||||
namespace: sonarqube
|
||||
labels:
|
||||
app: sonarqube
|
||||
chart: sonarqube-10.6.0_3033
|
||||
release: sonarqube
|
||||
heritage: Helm
|
||||
data:
|
||||
install_plugins.sh: |-
|
||||
---
|
||||
# Source: sonarqube/templates/jdbc-config.yaml
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: sonarqube-sonarqube-jdbc-config
|
||||
namespace: sonarqube
|
||||
labels:
|
||||
app: sonarqube
|
||||
chart: sonarqube-10.6.0_3033
|
||||
release: sonarqube
|
||||
heritage: Helm
|
||||
data:
|
||||
SONAR_JDBC_USERNAME: "sonarUser"
|
||||
SONAR_JDBC_URL: "jdbc:postgresql://sonarqube-postgresql:5432/sonarDB"
|
||||
---
|
||||
# Source: sonarqube/charts/postgresql/templates/svc-headless.yaml
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: sonarqube-postgresql-headless
|
||||
labels:
|
||||
app.kubernetes.io/name: postgresql
|
||||
helm.sh/chart: postgresql-10.15.0
|
||||
app.kubernetes.io/instance: sonarqube
|
||||
app.kubernetes.io/managed-by: Helm
|
||||
# Use this annotation in addition to the actual publishNotReadyAddresses
|
||||
# field below because the annotation will stop being respected soon but the
|
||||
# field is broken in some versions of Kubernetes:
|
||||
# https://github.com/kubernetes/kubernetes/issues/58662
|
||||
service.alpha.kubernetes.io/tolerate-unready-endpoints: "true"
|
||||
namespace: sonarqube
|
||||
spec:
|
||||
type: ClusterIP
|
||||
clusterIP: None
|
||||
# We want all pods in the StatefulSet to have their addresses published for
|
||||
# the sake of the other Postgresql pods even before they're ready, since they
|
||||
# have to be able to talk to each other in order to become ready.
|
||||
publishNotReadyAddresses: true
|
||||
ports:
|
||||
- name: tcp-postgresql
|
||||
port: 5432
|
||||
targetPort: tcp-postgresql
|
||||
selector:
|
||||
app.kubernetes.io/name: postgresql
|
||||
app.kubernetes.io/instance: sonarqube
|
||||
---
|
||||
# Source: sonarqube/charts/postgresql/templates/svc.yaml
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: sonarqube-postgresql
|
||||
labels:
|
||||
app.kubernetes.io/name: postgresql
|
||||
helm.sh/chart: postgresql-10.15.0
|
||||
app.kubernetes.io/instance: sonarqube
|
||||
app.kubernetes.io/managed-by: Helm
|
||||
annotations:
|
||||
namespace: sonarqube
|
||||
spec:
|
||||
type: ClusterIP
|
||||
ports:
|
||||
- name: tcp-postgresql
|
||||
port: 5432
|
||||
targetPort: tcp-postgresql
|
||||
selector:
|
||||
app.kubernetes.io/name: postgresql
|
||||
app.kubernetes.io/instance: sonarqube
|
||||
role: primary
|
||||
---
|
||||
# Source: sonarqube/templates/service.yaml
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: sonarqube-sonarqube
|
||||
namespace: sonarqube
|
||||
labels:
|
||||
app: sonarqube
|
||||
chart: sonarqube-10.6.0_3033
|
||||
release: sonarqube
|
||||
heritage: Helm
|
||||
spec:
|
||||
type: ClusterIP
|
||||
ports:
|
||||
- port: 9000
|
||||
targetPort: http
|
||||
protocol: TCP
|
||||
name: http
|
||||
selector:
|
||||
app: sonarqube
|
||||
release: sonarqube
|
||||
---
|
||||
# Source: sonarqube/charts/postgresql/templates/statefulset.yaml
|
||||
apiVersion: apps/v1
|
||||
kind: StatefulSet
|
||||
metadata:
|
||||
name: sonarqube-postgresql
|
||||
labels:
|
||||
app.kubernetes.io/name: postgresql
|
||||
helm.sh/chart: postgresql-10.15.0
|
||||
app.kubernetes.io/instance: sonarqube
|
||||
app.kubernetes.io/managed-by: Helm
|
||||
app.kubernetes.io/component: primary
|
||||
annotations:
|
||||
namespace: sonarqube
|
||||
spec:
|
||||
serviceName: sonarqube-postgresql-headless
|
||||
replicas: 1
|
||||
updateStrategy:
|
||||
type: RollingUpdate
|
||||
selector:
|
||||
matchLabels:
|
||||
app.kubernetes.io/name: postgresql
|
||||
app.kubernetes.io/instance: sonarqube
|
||||
role: primary
|
||||
template:
|
||||
metadata:
|
||||
name: sonarqube-postgresql
|
||||
labels:
|
||||
app.kubernetes.io/name: postgresql
|
||||
helm.sh/chart: postgresql-10.15.0
|
||||
app.kubernetes.io/instance: sonarqube
|
||||
app.kubernetes.io/managed-by: Helm
|
||||
role: primary
|
||||
app.kubernetes.io/component: primary
|
||||
spec:
|
||||
affinity:
|
||||
podAffinity:
|
||||
|
||||
podAntiAffinity:
|
||||
preferredDuringSchedulingIgnoredDuringExecution:
|
||||
- podAffinityTerm:
|
||||
labelSelector:
|
||||
matchLabels:
|
||||
app.kubernetes.io/name: postgresql
|
||||
app.kubernetes.io/instance: sonarqube
|
||||
app.kubernetes.io/component: primary
|
||||
namespaces:
|
||||
- "sonarqube"
|
||||
topologyKey: kubernetes.io/hostname
|
||||
weight: 1
|
||||
nodeAffinity:
|
||||
|
||||
securityContext:
|
||||
fsGroup: 1001
|
||||
automountServiceAccountToken: false
|
||||
containers:
|
||||
- name: sonarqube-postgresql
|
||||
image: reg.inje-private.com/nnd002/bitnami/postgresql:11.14.0-debian-10-r22
|
||||
imagePullPolicy: "IfNotPresent"
|
||||
resources:
|
||||
limits:
|
||||
cpu: 2
|
||||
memory: 2Gi
|
||||
requests:
|
||||
cpu: 100m
|
||||
memory: 200Mi
|
||||
securityContext:
|
||||
allowPrivilegeEscalation: false
|
||||
capabilities:
|
||||
drop:
|
||||
- ALL
|
||||
runAsNonRoot: true
|
||||
runAsUser: 1001
|
||||
seccompProfile:
|
||||
type: RuntimeDefault
|
||||
env:
|
||||
- name: BITNAMI_DEBUG
|
||||
value: "false"
|
||||
- name: POSTGRESQL_PORT_NUMBER
|
||||
value: "5432"
|
||||
- name: POSTGRESQL_VOLUME_DIR
|
||||
value: "/bitnami/postgresql"
|
||||
- name: PGDATA
|
||||
value: "/bitnami/postgresql/data"
|
||||
- name: POSTGRES_POSTGRES_PASSWORD
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: sonarqube-postgresql
|
||||
key: postgresql-postgres-password
|
||||
- name: POSTGRES_USER
|
||||
value: "sonarUser"
|
||||
- name: POSTGRES_PASSWORD
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: sonarqube-postgresql
|
||||
key: postgresql-password
|
||||
- name: POSTGRES_DB
|
||||
value: "sonarDB"
|
||||
- name: POSTGRESQL_ENABLE_LDAP
|
||||
value: "no"
|
||||
- name: POSTGRESQL_ENABLE_TLS
|
||||
value: "no"
|
||||
- name: POSTGRESQL_LOG_HOSTNAME
|
||||
value: "false"
|
||||
- name: POSTGRESQL_LOG_CONNECTIONS
|
||||
value: "false"
|
||||
- name: POSTGRESQL_LOG_DISCONNECTIONS
|
||||
value: "false"
|
||||
- name: POSTGRESQL_PGAUDIT_LOG_CATALOG
|
||||
value: "off"
|
||||
- name: POSTGRESQL_CLIENT_MIN_MESSAGES
|
||||
value: "error"
|
||||
- name: POSTGRESQL_SHARED_PRELOAD_LIBRARIES
|
||||
value: "pgaudit"
|
||||
ports:
|
||||
- name: tcp-postgresql
|
||||
containerPort: 5432
|
||||
livenessProbe:
|
||||
exec:
|
||||
command:
|
||||
- /bin/sh
|
||||
- -c
|
||||
- exec pg_isready -U "sonarUser" -d "dbname=sonarDB" -h 127.0.0.1 -p 5432
|
||||
initialDelaySeconds: 30
|
||||
periodSeconds: 10
|
||||
timeoutSeconds: 5
|
||||
successThreshold: 1
|
||||
failureThreshold: 6
|
||||
readinessProbe:
|
||||
exec:
|
||||
command:
|
||||
- /bin/sh
|
||||
- -c
|
||||
- -e
|
||||
- |
|
||||
exec pg_isready -U "sonarUser" -d "dbname=sonarDB" -h 127.0.0.1 -p 5432
|
||||
[ -f /opt/bitnami/postgresql/tmp/.initialized ] || [ -f /bitnami/postgresql/.initialized ]
|
||||
initialDelaySeconds: 5
|
||||
periodSeconds: 10
|
||||
timeoutSeconds: 5
|
||||
successThreshold: 1
|
||||
failureThreshold: 6
|
||||
volumeMounts:
|
||||
- name: dshm
|
||||
mountPath: /dev/shm
|
||||
- name: data
|
||||
mountPath: /bitnami/postgresql
|
||||
subPath:
|
||||
volumes:
|
||||
- name: dshm
|
||||
emptyDir:
|
||||
medium: Memory
|
||||
volumeClaimTemplates:
|
||||
- metadata:
|
||||
name: data
|
||||
spec:
|
||||
accessModes:
|
||||
- "ReadWriteOnce"
|
||||
resources:
|
||||
requests:
|
||||
storage: "20Gi"
|
||||
---
|
||||
# Source: sonarqube/templates/sonarqube-sts.yaml
|
||||
apiVersion: apps/v1
|
||||
kind: StatefulSet
|
||||
metadata:
|
||||
name: sonarqube-sonarqube
|
||||
namespace: sonarqube
|
||||
labels:
|
||||
app: sonarqube
|
||||
chart: sonarqube-10.6.0_3033
|
||||
release: sonarqube
|
||||
heritage: Helm
|
||||
app.kubernetes.io/name: sonarqube-sonarqube-sonarqube
|
||||
app.kubernetes.io/instance: sonarqube
|
||||
app.kubernetes.io/managed-by: Helm
|
||||
app.kubernetes.io/part-of: sonarqube
|
||||
app.kubernetes.io/component: sonarqube-sonarqube
|
||||
app.kubernetes.io/version: "10.6.0-community"
|
||||
spec:
|
||||
replicas: 1
|
||||
revisionHistoryLimit: 10
|
||||
serviceName: sonarqube-sonarqube
|
||||
selector:
|
||||
matchLabels:
|
||||
app: sonarqube
|
||||
release: sonarqube
|
||||
template:
|
||||
metadata:
|
||||
annotations:
|
||||
checksum/config: 2256323f7d9ffc8a4e18606aa35e18a28b05412806a19e4e6a15359f9b710ad0
|
||||
checksum/init-fs: 915551fa9592e2d81312781f423a59e6ba0837510c2e1d996e899eecd057ee91
|
||||
checksum/init-sysctl: 7aa0dd9441283780322cf0596f09a398219af7dd756fcead24179a08adcebc32
|
||||
checksum/plugins: 14cc0e459ae2f5de6499309b22cfdbcc1452d9e0e4f01a0ea45a43793e95e550
|
||||
checksum/secret: b433376554b78de7ccf285d4ffebc8759355e6916f285189ce33ba1eba4ba28a
|
||||
labels:
|
||||
app: sonarqube
|
||||
release: sonarqube
|
||||
spec:
|
||||
automountServiceAccountToken: false
|
||||
securityContext:
|
||||
fsGroup: 0
|
||||
initContainers:
|
||||
- name: "wait-for-db"
|
||||
image: reg.inje-private.com/nnd002/sonarqube:10.6.0-community
|
||||
imagePullPolicy: IfNotPresent
|
||||
securityContext:
|
||||
allowPrivilegeEscalation: false
|
||||
capabilities:
|
||||
drop:
|
||||
- ALL
|
||||
runAsGroup: 0
|
||||
runAsNonRoot: true
|
||||
runAsUser: 1000
|
||||
seccompProfile:
|
||||
type: RuntimeDefault
|
||||
command: ["/bin/bash", "-c"]
|
||||
args: ['set -o pipefail;for i in {1..200};do (echo > /dev/tcp/sonarqube-postgresql/5432) && exit 0; sleep 2;done; exit 1']
|
||||
- name: init-sysctl
|
||||
image: reg.inje-private.com/nnd002/sonarqube:10.6.0-community
|
||||
imagePullPolicy: IfNotPresent
|
||||
securityContext:
|
||||
privileged: true
|
||||
runAsUser: 0
|
||||
command: ["/bin/bash", "-e", "/tmp/scripts/init_sysctl.sh"]
|
||||
volumeMounts:
|
||||
- name: init-sysctl
|
||||
mountPath: /tmp/scripts/
|
||||
env:
|
||||
- name: SONAR_WEB_CONTEXT
|
||||
value: "/"
|
||||
- name: SONAR_WEB_JAVAOPTS
|
||||
value: ""
|
||||
- name: SONAR_CE_JAVAOPTS
|
||||
value: ""
|
||||
containers:
|
||||
- name: sonarqube
|
||||
image: reg.inje-private.com/nnd002/sonarqube:10.6.0-community
|
||||
imagePullPolicy: IfNotPresent
|
||||
ports:
|
||||
- name: http
|
||||
containerPort: 9000
|
||||
protocol: TCP
|
||||
resources:
|
||||
limits:
|
||||
cpu: 800m
|
||||
ephemeral-storage: 512000M
|
||||
memory: 6144M
|
||||
requests:
|
||||
cpu: 400m
|
||||
ephemeral-storage: 1536M
|
||||
memory: 2048M
|
||||
env:
|
||||
- name: SONAR_HELM_CHART_VERSION
|
||||
value: 10.6.0_3033
|
||||
- name: SONAR_JDBC_PASSWORD
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: sonarqube-postgresql
|
||||
key: postgresql-password
|
||||
- name: SONAR_WEB_SYSTEMPASSCODE
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: sonarqube-sonarqube-monitoring-passcode
|
||||
key: SONAR_WEB_SYSTEMPASSCODE
|
||||
- name: SONAR_WEB_CONTEXT
|
||||
value: "/"
|
||||
- name: SONAR_WEB_JAVAOPTS
|
||||
value: ""
|
||||
- name: SONAR_CE_JAVAOPTS
|
||||
value: ""
|
||||
envFrom:
|
||||
- configMapRef:
|
||||
name: sonarqube-sonarqube-jdbc-config
|
||||
livenessProbe:
|
||||
exec:
|
||||
command:
|
||||
- sh
|
||||
- -c
|
||||
- |
|
||||
wget --no-proxy --quiet -O /dev/null --timeout=1 --header="X-Sonar-Passcode: $SONAR_WEB_SYSTEMPASSCODE" "http://localhost:9000/api/system/liveness"
|
||||
failureThreshold: 6
|
||||
initialDelaySeconds: 60
|
||||
periodSeconds: 30
|
||||
timeoutSeconds: 1
|
||||
readinessProbe:
|
||||
exec:
|
||||
command:
|
||||
- sh
|
||||
- -c
|
||||
- |
|
||||
#!/bin/bash
|
||||
# A Sonarqube container is considered ready if the status is UP, DB_MIGRATION_NEEDED or DB_MIGRATION_RUNNING
|
||||
# status about migration are added to prevent the node to be kill while sonarqube is upgrading the database.
|
||||
if wget --no-proxy -qO- http://localhost:9000/api/system/status | grep -q -e '"status":"UP"' -e '"status":"DB_MIGRATION_NEEDED"' -e '"status":"DB_MIGRATION_RUNNING"'; then
|
||||
exit 0
|
||||
fi
|
||||
exit 1
|
||||
failureThreshold: 6
|
||||
initialDelaySeconds: 60
|
||||
periodSeconds: 30
|
||||
timeoutSeconds: 1
|
||||
startupProbe:
|
||||
httpGet:
|
||||
scheme: HTTP
|
||||
path: /api/system/status
|
||||
port: http
|
||||
initialDelaySeconds: 30
|
||||
periodSeconds: 10
|
||||
failureThreshold: 24
|
||||
timeoutSeconds: 1
|
||||
securityContext:
|
||||
allowPrivilegeEscalation: false
|
||||
capabilities:
|
||||
drop:
|
||||
- ALL
|
||||
runAsGroup: 0
|
||||
runAsNonRoot: true
|
||||
runAsUser: 1000
|
||||
seccompProfile:
|
||||
type: RuntimeDefault
|
||||
volumeMounts:
|
||||
- mountPath: /opt/sonarqube/data
|
||||
name: sonarqube
|
||||
subPath: data
|
||||
- mountPath: /opt/sonarqube/temp
|
||||
name: sonarqube
|
||||
subPath: temp
|
||||
- mountPath: /opt/sonarqube/logs
|
||||
name: sonarqube
|
||||
subPath: logs
|
||||
- mountPath: /tmp
|
||||
name: tmp-dir
|
||||
serviceAccountName: default
|
||||
volumes:
|
||||
- name: init-sysctl
|
||||
configMap:
|
||||
name: sonarqube-sonarqube-init-sysctl
|
||||
items:
|
||||
- key: init_sysctl.sh
|
||||
path: init_sysctl.sh
|
||||
- name: init-fs
|
||||
configMap:
|
||||
name: sonarqube-sonarqube-init-fs
|
||||
items:
|
||||
- key: init_fs.sh
|
||||
path: init_fs.sh
|
||||
- name: sonarqube
|
||||
persistentVolumeClaim:
|
||||
claimName: sonarqube-sonarqube
|
||||
- name : tmp-dir
|
||||
emptyDir:
|
||||
{}
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
labels:
|
||||
app: sonarqube
|
||||
chart: sonarqube-10.6.0_3033
|
||||
release: sonarqube
|
||||
name: sonarqube-sonarqube
|
||||
namespace: sonarqube
|
||||
spec:
|
||||
accessModes:
|
||||
- ReadWriteMany
|
||||
storageClassName: sc-monitoring
|
||||
resources:
|
||||
requests:
|
||||
storage: 20Gi
|
||||
|
||||
---
|
||||
# Source: sonarqube/templates/tests/sonarqube-test.yaml
|
||||
apiVersion: v1
|
||||
kind: Pod
|
||||
metadata:
|
||||
name: "sonarqube-ui-test"
|
||||
namespace: sonarqube
|
||||
annotations:
|
||||
"helm.sh/hook": test-success
|
||||
labels:
|
||||
app: sonarqube
|
||||
chart: sonarqube-10.6.0_3033
|
||||
release: sonarqube
|
||||
heritage: Helm
|
||||
spec:
|
||||
automountServiceAccountToken: false
|
||||
containers:
|
||||
- name: sonarqube-ui-test
|
||||
image: "reg.inje-private.com/nnd002/sonarqube:10.6.0-community"
|
||||
imagePullPolicy: IfNotPresent
|
||||
command: ['wget']
|
||||
args: [
|
||||
'--retry-connrefused',
|
||||
'--waitretry=1',
|
||||
'--timeout=5',
|
||||
'-t',
|
||||
'12',
|
||||
'-qO-',
|
||||
'sonarqube-sonarqube:9000/api/system/status'
|
||||
]
|
||||
resources:
|
||||
limits:
|
||||
cpu: 500m
|
||||
ephemeral-storage: 1000M
|
||||
memory: 200M
|
||||
requests:
|
||||
cpu: 500m
|
||||
ephemeral-storage: 100M
|
||||
memory: 200M
|
||||
restartPolicy: Never
|
||||
|
|
@ -0,0 +1,23 @@
|
|||
apiVersion: networking.k8s.io/v1
|
||||
kind: Ingress
|
||||
metadata:
|
||||
name: sonarqube-ingress
|
||||
namespace: sonarqube
|
||||
spec:
|
||||
ingressClassName: nginx
|
||||
rules:
|
||||
- host: sonar.inje-private.com
|
||||
http:
|
||||
paths:
|
||||
- backend:
|
||||
service:
|
||||
name: sonarqube-sonarqube
|
||||
port:
|
||||
name: http
|
||||
path: /
|
||||
pathType: Prefix
|
||||
tls:
|
||||
- hosts:
|
||||
- "sonar.inje-private.com"
|
||||
secretName: sonarqube-ssl
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,87 @@
|
|||
apiVersion: admissionregistration.k8s.io/v1
|
||||
kind: ValidatingWebhookConfiguration
|
||||
metadata:
|
||||
labels:
|
||||
app.kubernetes.io/component: webhook
|
||||
app.kubernetes.io/instance: default
|
||||
app.kubernetes.io/part-of: tekton-pipelines
|
||||
pipeline.tekton.dev/release: v0.57.0
|
||||
name: config.webhook.pipeline.tekton.dev
|
||||
webhooks:
|
||||
- admissionReviewVersions:
|
||||
- v1
|
||||
clientConfig:
|
||||
service:
|
||||
name: tekton-pipelines-webhook
|
||||
namespace: tekton-pipelines
|
||||
failurePolicy: Fail
|
||||
name: config.webhook.pipeline.tekton.dev
|
||||
objectSelector:
|
||||
matchLabels:
|
||||
app.kubernetes.io/part-of: tekton-pipelines
|
||||
sideEffects: None
|
||||
---
|
||||
apiVersion: admissionregistration.k8s.io/v1
|
||||
kind: ValidatingWebhookConfiguration
|
||||
metadata:
|
||||
labels:
|
||||
app.kubernetes.io/component: webhook
|
||||
app.kubernetes.io/instance: default
|
||||
app.kubernetes.io/part-of: tekton-triggers
|
||||
triggers.tekton.dev/release: v0.26.1
|
||||
name: config.webhook.triggers.tekton.dev
|
||||
webhooks:
|
||||
- admissionReviewVersions:
|
||||
- v1
|
||||
clientConfig:
|
||||
service:
|
||||
name: tekton-triggers-webhook
|
||||
namespace: tekton-pipelines
|
||||
failurePolicy: Fail
|
||||
name: config.webhook.triggers.tekton.dev
|
||||
namespaceSelector:
|
||||
matchExpressions:
|
||||
- key: triggers.tekton.dev/release
|
||||
operator: Exists
|
||||
sideEffects: None
|
||||
---
|
||||
apiVersion: admissionregistration.k8s.io/v1
|
||||
kind: ValidatingWebhookConfiguration
|
||||
metadata:
|
||||
labels:
|
||||
app.kubernetes.io/component: webhook
|
||||
app.kubernetes.io/instance: default
|
||||
app.kubernetes.io/part-of: tekton-pipelines
|
||||
pipeline.tekton.dev/release: v0.57.0
|
||||
name: validation.webhook.pipeline.tekton.dev
|
||||
webhooks:
|
||||
- admissionReviewVersions:
|
||||
- v1
|
||||
clientConfig:
|
||||
service:
|
||||
name: tekton-pipelines-webhook
|
||||
namespace: tekton-pipelines
|
||||
failurePolicy: Fail
|
||||
name: validation.webhook.pipeline.tekton.dev
|
||||
sideEffects: None
|
||||
---
|
||||
apiVersion: admissionregistration.k8s.io/v1
|
||||
kind: ValidatingWebhookConfiguration
|
||||
metadata:
|
||||
labels:
|
||||
app.kubernetes.io/component: webhook
|
||||
app.kubernetes.io/instance: default
|
||||
app.kubernetes.io/part-of: tekton-triggers
|
||||
triggers.tekton.dev/release: v0.26.1
|
||||
name: validation.webhook.triggers.tekton.dev
|
||||
webhooks:
|
||||
- admissionReviewVersions:
|
||||
- v1
|
||||
clientConfig:
|
||||
service:
|
||||
name: tekton-triggers-webhook
|
||||
namespace: tekton-pipelines
|
||||
failurePolicy: Fail
|
||||
name: validation.webhook.triggers.tekton.dev
|
||||
sideEffects: None
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,119 @@
|
|||
apiVersion: dashboard.tekton.dev/v1alpha1
|
||||
kind: Extension
|
||||
metadata:
|
||||
name: cronjobs
|
||||
spec:
|
||||
apiVersion: batch/v1
|
||||
displayname: k8s cronjobs
|
||||
name: cronjobs
|
||||
---
|
||||
apiVersion: triggers.tekton.dev/v1alpha1
|
||||
kind: ClusterInterceptor
|
||||
metadata:
|
||||
labels:
|
||||
server/type: https
|
||||
name: bitbucket
|
||||
spec:
|
||||
clientConfig:
|
||||
service:
|
||||
name: tekton-triggers-core-interceptors
|
||||
namespace: tekton-pipelines
|
||||
path: bitbucket
|
||||
port: 8443
|
||||
---
|
||||
apiVersion: triggers.tekton.dev/v1alpha1
|
||||
kind: ClusterInterceptor
|
||||
metadata:
|
||||
labels:
|
||||
server/type: https
|
||||
name: cel
|
||||
spec:
|
||||
clientConfig:
|
||||
service:
|
||||
name: tekton-triggers-core-interceptors
|
||||
namespace: tekton-pipelines
|
||||
path: cel
|
||||
port: 8443
|
||||
---
|
||||
apiVersion: triggers.tekton.dev/v1alpha1
|
||||
kind: ClusterInterceptor
|
||||
metadata:
|
||||
labels:
|
||||
server/type: https
|
||||
name: github
|
||||
spec:
|
||||
clientConfig:
|
||||
service:
|
||||
name: tekton-triggers-core-interceptors
|
||||
namespace: tekton-pipelines
|
||||
path: github
|
||||
port: 8443
|
||||
---
|
||||
apiVersion: triggers.tekton.dev/v1alpha1
|
||||
kind: ClusterInterceptor
|
||||
metadata:
|
||||
labels:
|
||||
server/type: https
|
||||
name: gitlab
|
||||
spec:
|
||||
clientConfig:
|
||||
service:
|
||||
name: tekton-triggers-core-interceptors
|
||||
namespace: tekton-pipelines
|
||||
path: gitlab
|
||||
port: 8443
|
||||
---
|
||||
apiVersion: triggers.tekton.dev/v1alpha1
|
||||
kind: ClusterInterceptor
|
||||
metadata:
|
||||
labels:
|
||||
server/type: https
|
||||
name: slack
|
||||
spec:
|
||||
clientConfig:
|
||||
service:
|
||||
name: tekton-triggers-core-interceptors
|
||||
namespace: tekton-pipelines
|
||||
path: slack
|
||||
port: 8443
|
||||
---
|
||||
apiVersion: admissionregistration.k8s.io/v1
|
||||
kind: MutatingWebhookConfiguration
|
||||
metadata:
|
||||
labels:
|
||||
app.kubernetes.io/component: webhook
|
||||
app.kubernetes.io/instance: default
|
||||
app.kubernetes.io/part-of: tekton-pipelines
|
||||
pipeline.tekton.dev/release: v0.57.0
|
||||
name: webhook.pipeline.tekton.dev
|
||||
webhooks:
|
||||
- admissionReviewVersions:
|
||||
- v1
|
||||
clientConfig:
|
||||
service:
|
||||
name: tekton-pipelines-webhook
|
||||
namespace: tekton-pipelines
|
||||
failurePolicy: Fail
|
||||
name: webhook.pipeline.tekton.dev
|
||||
sideEffects: None
|
||||
---
|
||||
apiVersion: admissionregistration.k8s.io/v1
|
||||
kind: MutatingWebhookConfiguration
|
||||
metadata:
|
||||
labels:
|
||||
app.kubernetes.io/component: webhook
|
||||
app.kubernetes.io/instance: default
|
||||
app.kubernetes.io/part-of: tekton-triggers
|
||||
triggers.tekton.dev/release: v0.26.1
|
||||
name: webhook.triggers.tekton.dev
|
||||
webhooks:
|
||||
- admissionReviewVersions:
|
||||
- v1
|
||||
clientConfig:
|
||||
service:
|
||||
name: tekton-triggers-webhook
|
||||
namespace: tekton-pipelines
|
||||
failurePolicy: Fail
|
||||
name: webhook.triggers.tekton.dev
|
||||
sideEffects: None
|
||||
|
||||
|
|
@ -0,0 +1,25 @@
|
|||
apiVersion: networking.k8s.io/v1
|
||||
kind: Ingress
|
||||
metadata:
|
||||
name: ing-tekton
|
||||
namespace: tekton-pipelines
|
||||
annotations:
|
||||
nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
|
||||
spec:
|
||||
ingressClassName: nginx
|
||||
rules:
|
||||
- host: tekton.inje-private.com # 사전 생성된 인증서의 도메인적용.
|
||||
http:
|
||||
paths:
|
||||
- path: /
|
||||
pathType: Prefix
|
||||
backend:
|
||||
service:
|
||||
name: tekton-dashboard
|
||||
port:
|
||||
number: 9097
|
||||
tls:
|
||||
- hosts:
|
||||
- "tekton.inje-private.com"
|
||||
secretName: tekton-ssl
|
||||
|
||||
|
|
@ -0,0 +1,311 @@
|
|||
apiVersion: v1
|
||||
kind: Namespace
|
||||
metadata:
|
||||
labels:
|
||||
kubernetes.io/metadata.name: harbor
|
||||
name: harbor
|
||||
spec:
|
||||
finalizers:
|
||||
- kubernetes
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
labels:
|
||||
app: harbor
|
||||
release: harbor
|
||||
name: harbor-core
|
||||
namespace: harbor
|
||||
data:
|
||||
_REDIS_URL_CORE: redis://harbor-redis:6379/0?idle_timeout_seconds=30
|
||||
_REDIS_URL_REG: redis://harbor-redis:6379/2?idle_timeout_seconds=30
|
||||
CHART_CACHE_DRIVER: redis
|
||||
CONFIG_PATH: /etc/core/app.conf
|
||||
CORE_LOCAL_URL: http://127.0.0.1:8080
|
||||
CORE_URL: http://harbor-core:80
|
||||
DATABASE_TYPE: postgresql
|
||||
EXT_ENDPOINT: https://harbor.icurfer.com
|
||||
HTTP_PROXY: ""
|
||||
HTTPS_PROXY: ""
|
||||
JOBSERVICE_URL: http://harbor-jobservice
|
||||
LOG_LEVEL: info
|
||||
NO_PROXY: harbor-core,harbor-jobservice,harbor-database,harbor-registry,harbor-portal,harbor-trivy,harbor-exporter,127.0.0.1,localhost,.local,.internal
|
||||
PERMITTED_REGISTRY_TYPES_FOR_PROXY_CACHE: docker-hub,harbor,azure-acr,aws-ecr,google-gcr,quay,docker-registry,github-ghcr,jfrog-artifactory
|
||||
PORT: "8080"
|
||||
PORTAL_URL: http://harbor-portal
|
||||
POSTGRESQL_DATABASE: registry
|
||||
POSTGRESQL_HOST: harbor-database
|
||||
POSTGRESQL_MAX_IDLE_CONNS: "100"
|
||||
POSTGRESQL_MAX_OPEN_CONNS: "900"
|
||||
POSTGRESQL_PORT: "5432"
|
||||
POSTGRESQL_SSLMODE: disable
|
||||
POSTGRESQL_USERNAME: postgres
|
||||
QUOTA_UPDATE_PROVIDER: db
|
||||
REGISTRY_CONTROLLER_URL: http://harbor-registry:8080
|
||||
REGISTRY_CREDENTIAL_USERNAME: harbor_registry_user
|
||||
REGISTRY_STORAGE_PROVIDER_NAME: filesystem
|
||||
REGISTRY_URL: http://harbor-registry:5000
|
||||
TOKEN_SERVICE_URL: http://harbor-core:80/service/token
|
||||
TRIVY_ADAPTER_URL: http://harbor-trivy:8080
|
||||
WITH_TRIVY: "true"
|
||||
app.conf: |
|
||||
appname = Harbor
|
||||
runmode = prod
|
||||
enablegzip = true
|
||||
|
||||
[prod]
|
||||
httpport = 8080
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
labels:
|
||||
app: harbor
|
||||
release: harbor
|
||||
name: harbor-jobservice
|
||||
namespace: harbor
|
||||
data:
|
||||
config.yml: |
|
||||
#Server listening port
|
||||
protocol: "http"
|
||||
port: 8080
|
||||
worker_pool:
|
||||
workers: 10
|
||||
backend: "redis"
|
||||
redis_pool:
|
||||
redis_url: "redis://harbor-redis:6379/1"
|
||||
namespace: "harbor_job_service_namespace"
|
||||
idle_timeout_second: 3600
|
||||
job_loggers:
|
||||
- name: "FILE"
|
||||
level: INFO
|
||||
settings: # Customized settings of logger
|
||||
base_dir: "/var/log/jobs"
|
||||
sweeper:
|
||||
duration: 14 #days
|
||||
settings: # Customized settings of sweeper
|
||||
work_dir: "/var/log/jobs"
|
||||
metric:
|
||||
enabled: false
|
||||
path: /metrics
|
||||
port: 8001
|
||||
#Loggers for the job service
|
||||
loggers:
|
||||
- name: "STD_OUTPUT"
|
||||
level: INFO
|
||||
reaper:
|
||||
# the max time to wait for a task to finish, if unfinished after max_update_hours, the task will be mark as error, but the task will continue to run, default value is 24
|
||||
max_update_hours: 24
|
||||
# the max time for execution in running state without new task created
|
||||
max_dangling_hours: 168
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
labels:
|
||||
app: harbor
|
||||
release: harbor
|
||||
name: harbor-jobservice-env
|
||||
namespace: harbor
|
||||
data:
|
||||
CORE_URL: http://harbor-core:80
|
||||
HTTP_PROXY: ""
|
||||
HTTPS_PROXY: ""
|
||||
JOBSERVICE_WEBHOOK_JOB_HTTP_CLIENT_TIMEOUT: "3"
|
||||
JOBSERVICE_WEBHOOK_JOB_MAX_RETRY: "3"
|
||||
NO_PROXY: harbor-core,harbor-jobservice,harbor-database,harbor-registry,harbor-portal,harbor-trivy,harbor-exporter,127.0.0.1,localhost,.local,.internal
|
||||
REGISTRY_CONTROLLER_URL: http://harbor-registry:8080
|
||||
REGISTRY_CREDENTIAL_USERNAME: harbor_registry_user
|
||||
REGISTRY_URL: http://harbor-registry:5000
|
||||
TOKEN_SERVICE_URL: http://harbor-core:80/service/token
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
labels:
|
||||
app: harbor
|
||||
release: harbor
|
||||
name: harbor-portal
|
||||
namespace: harbor
|
||||
data:
|
||||
nginx.conf: |
|
||||
worker_processes auto;
|
||||
pid /tmp/nginx.pid;
|
||||
events {
|
||||
worker_connections 1024;
|
||||
}
|
||||
http {
|
||||
client_body_temp_path /tmp/client_body_temp;
|
||||
proxy_temp_path /tmp/proxy_temp;
|
||||
fastcgi_temp_path /tmp/fastcgi_temp;
|
||||
uwsgi_temp_path /tmp/uwsgi_temp;
|
||||
scgi_temp_path /tmp/scgi_temp;
|
||||
server {
|
||||
listen 8080;
|
||||
listen [::]:8080;
|
||||
server_name localhost;
|
||||
root /usr/share/nginx/html;
|
||||
index index.html index.htm;
|
||||
include /etc/nginx/mime.types;
|
||||
gzip on;
|
||||
gzip_min_length 1000;
|
||||
gzip_proxied expired no-cache no-store private auth;
|
||||
gzip_types text/plain text/css application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript;
|
||||
location /devcenter-api-2.0 {
|
||||
try_files $uri $uri/ /swagger-ui-index.html;
|
||||
}
|
||||
location / {
|
||||
try_files $uri $uri/ /index.html;
|
||||
}
|
||||
location = /index.html {
|
||||
add_header Cache-Control "no-store, no-cache, must-revalidate";
|
||||
}
|
||||
}
|
||||
}
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
labels:
|
||||
app: harbor
|
||||
release: harbor
|
||||
name: harbor-registry
|
||||
namespace: harbor
|
||||
data:
|
||||
config.yml: |
|
||||
version: 0.1
|
||||
log:
|
||||
level: info
|
||||
fields:
|
||||
service: registry
|
||||
storage:
|
||||
filesystem:
|
||||
rootdirectory: /storage
|
||||
cache:
|
||||
layerinfo: redis
|
||||
maintenance:
|
||||
uploadpurging:
|
||||
enabled: true
|
||||
age: 168h
|
||||
interval: 24h
|
||||
dryrun: false
|
||||
delete:
|
||||
enabled: true
|
||||
redirect:
|
||||
disable: false
|
||||
redis:
|
||||
addr: harbor-redis:6379
|
||||
db: 2
|
||||
readtimeout: 10s
|
||||
writetimeout: 10s
|
||||
dialtimeout: 10s
|
||||
pool:
|
||||
maxidle: 100
|
||||
maxactive: 500
|
||||
idletimeout: 60s
|
||||
http:
|
||||
addr: :5000
|
||||
#relativeurls: false
|
||||
relativeurls: true
|
||||
# set via environment variable
|
||||
# secret: placeholder
|
||||
debug:
|
||||
addr: localhost:5001
|
||||
auth:
|
||||
htpasswd:
|
||||
realm: harbor-registry-basic-realm
|
||||
path: /etc/registry/passwd
|
||||
validation:
|
||||
disabled: true
|
||||
compatibility:
|
||||
schema1:
|
||||
enabled: true
|
||||
ctl-config.yml: |
|
||||
---
|
||||
protocol: "http"
|
||||
port: 8080
|
||||
log_level: info
|
||||
registry_config: "/etc/registry/config.yml"
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
labels:
|
||||
app: harbor
|
||||
release: harbor
|
||||
name: harbor-registryctl
|
||||
namespace: harbor
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Secret
|
||||
metadata:
|
||||
labels:
|
||||
app: harbor
|
||||
release: harbor
|
||||
name: harbor-database
|
||||
namespace: harbor
|
||||
type: Opaque
|
||||
data:
|
||||
POSTGRES_PASSWORD: UmxheG9kbXM5MCFA
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Secret
|
||||
metadata:
|
||||
labels:
|
||||
app: harbor
|
||||
release: harbor
|
||||
name: harbor-jobservice
|
||||
namespace: harbor
|
||||
type: Opaque
|
||||
data:
|
||||
JOBSERVICE_SECRET: akVWbzlyNFJaU2R1clJqUA==
|
||||
REGISTRY_CREDENTIAL_PASSWORD: aGFyYm9yX3JlZ2lzdHJ5X3Bhc3N3b3Jk
|
||||
---
|
||||
apiVersion: v1
|
||||
data:
|
||||
REGISTRY_HTTP_SECRET: dHlCdm41MXpIakxLRm5mRw==
|
||||
REGISTRY_REDIS_PASSWORD: ""
|
||||
kind: Secret
|
||||
metadata:
|
||||
labels:
|
||||
app: harbor
|
||||
release: harbor
|
||||
name: harbor-registry
|
||||
namespace: harbor
|
||||
type: Opaque
|
||||
---
|
||||
apiVersion: v1
|
||||
data:
|
||||
REGISTRY_HTPASSWD: aGFyYm9yX3JlZ2lzdHJ5X3VzZXI6JDJhJDEwJG1uRkVSQkVyRmROYnNuZDVHWUxTQXVUOTRaUWxZNGkxU3BtNTk4dWlmV2pLbEJrQnJhbHEu
|
||||
kind: Secret
|
||||
metadata:
|
||||
labels:
|
||||
app: harbor
|
||||
release: harbor
|
||||
name: harbor-registry-htpasswd
|
||||
namespace: harbor
|
||||
type: Opaque
|
||||
---
|
||||
apiVersion: v1
|
||||
data: null
|
||||
kind: Secret
|
||||
metadata:
|
||||
labels:
|
||||
app: harbor
|
||||
release: harbor
|
||||
name: harbor-registryctl
|
||||
namespace: harbor
|
||||
type: Opaque
|
||||
---
|
||||
apiVersion: v1
|
||||
data:
|
||||
gitHubToken: ""
|
||||
redisURL: cmVkaXM6Ly9oYXJib3ItcmVkaXM6NjM3OS81P2lkbGVfdGltZW91dF9zZWNvbmRzPTMw
|
||||
kind: Secret
|
||||
metadata:
|
||||
labels:
|
||||
app: harbor
|
||||
release: harbor
|
||||
name: harbor-trivy
|
||||
namespace: harbor
|
||||
type: Opaque
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
apiVersion: v1
|
||||
kind: Secret
|
||||
metadata:
|
||||
name: harbor-cacerts
|
||||
namespace: harbor
|
||||
data:
|
||||
cert: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUU5RENDQTl5Z0F3SUJBZ0lTQktsUkF1R24rM2N1R2xKS1o5aVY4Vmx4TUEwR0NTcUdTSWIzRFFFQkN3VUEKTURJeEN6QUpCZ05WQkFZVEFsVlRNUll3RkFZRFZRUUtFdzFNWlhRbmN5QkZibU55ZVhCME1Rc3dDUVlEVlFRRApFd0pTTXpBZUZ3MHlOREF6TURJeE5EQTVOVFZhRncweU5EQTFNekV4TkRBNU5UUmFNQmd4RmpBVUJnTlZCQU1NCkRTb3VhV04xY21abGNpNWpiMjB3Z2dFaU1BMEdDU3FHU0liM0RRRUJBUVVBQTRJQkR3QXdnZ0VLQW9JQkFRQ3oKQWVxVS9KSkJGWWJpeFQwbTRKTXU3QW5CdTVYRUFVSUhHendsR3ZjdjJXRTBxajNwU1JCeUdJWEo0eHdycnl3eAprYjgrRkxTSjh4U3Q2TXpwZjVxNTBQMm9PYklFdkMwY0drNHZuZThGVm1YckNKckNMaUtld0JBRWhFcC9IUjdYClVFSFRLVFpXTE5oUkIzNjMxZFkrcHhHU1AxeWNMblBXYkJQOUVSa2xzeUhoUnJpWHBxTmZDcGVIM3kxb3VJOUwKV3l5Yks3SUdmSkVzN1g0TE1OZ2RycEZtUzlCdTNZQ0JVMExZMlZtWVFJNVFaNkNhbisrQk51bVN6U0M4ZVRUaApJamY0Uk14R2JIUFNDYjBXb3hxM3M4RmZmQVd1a2JOSmhXSTlidXNucWxNTnRrQnREdFYxdVpaQUlLMno0cnFCCmlJbDlaS0lza3FEQUJaMWFSb0JkQWdNQkFBR2pnZ0ljTUlJQ0dEQU9CZ05WSFE4QkFmOEVCQU1DQmFBd0hRWUQKVlIwbEJCWXdGQVlJS3dZQkJRVUhBd0VHQ0NzR0FRVUZCd01DTUF3R0ExVWRFd0VCL3dRQ01BQXdIUVlEVlIwTwpCQllFRk51b3p0ZmprQ25FRGFxd01zVlBwdU5CaU5YaU1COEdBMVVkSXdRWU1CYUFGQlF1c3hlM1dGYkxybEFKClFPWWZyNTJMRk1MR01GVUdDQ3NHQVFVRkJ3RUJCRWt3UnpBaEJnZ3JCZ0VGQlFjd0FZWVZhSFIwY0RvdkwzSXoKTG04dWJHVnVZM0l1YjNKbk1DSUdDQ3NHQVFVRkJ6QUNoaFpvZEhSd09pOHZjak11YVM1c1pXNWpjaTV2Y21jdgpNQ1VHQTFVZEVRUWVNQnlDRFNvdWFXTjFjbVpsY2k1amIyMkNDMmxqZFhKbVpYSXVZMjl0TUJNR0ExVWRJQVFNCk1Bb3dDQVlHWjRFTUFRSUJNSUlCQkFZS0t3WUJCQUhXZVFJRUFnU0I5UVNCOGdEd0FIVUFPMU4zZFQ0dHVZQk8KaXpCYkJ2NUFPMmZZVDhQMHg3MEFEUzF5YitINjFCY0FBQUdOLzdidTJ3QUFCQU1BUmpCRUFpQkdEcW5xZytIcwpQUmVmYTc5TXdVZjlmUzFOYWh3SEsrRlJrVlg4REE2QUN3SWdPN2NsOU1IcC9hVVFSbkhZNFlRU01lMG5WbHhUCkpBY0RuY2syUkJQMFhBUUFkd0R1emRCazFkc2F6c1ZjdDUyMHpST2lNb2RHZkx6czNzTlJTRmxHY1IrMW13QUEKQVkzL3R1N0tBQUFFQXdCSU1FWUNJUUNTWTlxczV0ZFY2ejR5c01acG9yOXZXcmhsVXlScFNINVJIVGRQZGdlWQpsd0loQUpvblNHeVJOYmVNcEs3SW5uYVJxOVFuajB3R1hhWnVNMnZXTmlUYWFLTzBNQTBHQ1NxR1NJYjNEUUVCCkN3VUFBNElCQVFCMmlWcEttN0IxZ3p0a01Ud2QrQXBNOWh4SzkwYndWSTZxUnZLNmpsZVFJV0JCZG84Z3I0QlEKTlpPNDBWa21OaFhoY3ljQ1ZsSmlhT3JLd1J0c1VhMzVmc29BVTFCQzlodFRPT3R4TXYvb2lDZlA4aEZQNGttagpOTVFzNVZ2eFR6cmRjbWxhRmJaOWJkNVF2dko3L2hadTBnZ1ZrSUZVRXVZcWtQNFFzSHU1dXhOd01rWUY3RGUxCnVsVGY1YlFQcTJ0TEk5cTk1OUNsM2xMTTJqYklkM2h1bkRrMDFLZ2dSOWNkUmEzZnEzM2VZNkY2eWNWSVBPblMKdGhXck9melc5K2IrSFNDWHkyd3BJR0VTUTVJQU95cUdibnBBR1Z6U294UnVrNW1Wd0FqeDBaMW94eUdPRVprTgpEQUhHa21aNThIOUJpcXJ0VzBuaEMyKzN0cCtmR2kydwotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCi0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQpNSUlGRmpDQ0F2NmdBd0lCQWdJUkFKRXJDRXJQREJpblUvYldMaVduWDFvd0RRWUpLb1pJaHZjTkFRRUxCUUF3ClR6RUxNQWtHQTFVRUJoTUNWVk14S1RBbkJnTlZCQW9USUVsdWRHVnlibVYwSUZObFkzVnlhWFI1SUZKbGMyVmgKY21Ob0lFZHliM1Z3TVJVd0V3WURWUVFERXd4SlUxSkhJRkp2YjNRZ1dERXdIaGNOTWpBd09UQTBNREF3TURBdwpXaGNOTWpVd09URTFNVFl3TURBd1dqQXlNUXN3Q1FZRFZRUUdFd0pWVXpFV01CUUdBMVVFQ2hNTlRHVjBKM01nClJXNWpjbmx3ZERFTE1Ba0dBMVVFQXhNQ1VqTXdnZ0VpTUEwR0NTcUdTSWIzRFFFQkFRVUFBNElCRHdBd2dnRUsKQW9JQkFRQzdBaFVvelBhZ2xOTVBFdXlOVlpMRCtJTHhtYVo2UW9pblhTYXF0U3U1eFV5eHI0NXIrWFhJbzljUApSNVFVVlRWWGpKNm9vamtaOVlJOFFxbE9idlU3d3k3YmpjQ3dYUE5aT09mdHoybndXZ3NidnNDVUpDV0gramR4CnN4UG5IS3pobSsvYjVEdEZVa1dXcWNGVHpqVElVdTYxcnUyUDNtQnc0cVZVcTdadERwZWxRRFJySzlPOFp1dG0KTkh6NmE0dVBWeW1aK0RBWFhicHliL3VCeGEzU2hsZzlGOGZuQ2J2eEsvZUczTUhhY1YzVVJ1UE1yU1hCaUx4ZwpaM1Ztcy9FWTk2SmM1bFAvT29pMlI2WC9FeGpxbUFsM1A1MVQrYzhCNWZXbWNCY1VyMk9rLzVtems1M2NVNmNHCi9raUZIYUZwcmlWMXV4UE1VZ1AxN1ZHaGk5c1ZBZ01CQUFHamdnRUlNSUlCQkRBT0JnTlZIUThCQWY4RUJBTUMKQVlZd0hRWURWUjBsQkJZd0ZBWUlLd1lCQlFVSEF3SUdDQ3NHQVFVRkJ3TUJNQklHQTFVZEV3RUIvd1FJTUFZQgpBZjhDQVFBd0hRWURWUjBPQkJZRUZCUXVzeGUzV0ZiTHJsQUpRT1lmcjUyTEZNTEdNQjhHQTFVZEl3UVlNQmFBCkZIbTBXZVo3dHVYa0FYT0FDSWpJR2xqMjZadHVNRElHQ0NzR0FRVUZCd0VCQkNZd0pEQWlCZ2dyQmdFRkJRY3cKQW9ZV2FIUjBjRG92TDNneExta3ViR1Z1WTNJdWIzSm5MekFuQmdOVkhSOEVJREFlTUJ5Z0dxQVloaFpvZEhSdwpPaTh2ZURFdVl5NXNaVzVqY2k1dmNtY3ZNQ0lHQTFVZElBUWJNQmt3Q0FZR1o0RU1BUUlCTUEwR0N5c0dBUVFCCmd0OFRBUUVCTUEwR0NTcUdTSWIzRFFFQkN3VUFBNElDQVFDRnlrNUhQcVAzaFVTRnZOVm5lTEtZWTYxMVRSNlcKUFRObGNsUXRnYURxdyszNElMOWZ6TGR3QUxkdU8vWmVsTjdrSUorbTc0dXlBK2VpdFJZOGtjNjA3VGtDNTN3bAppa2ZtWlc0L1J2VFo4TTZVSys1VXpoSzhqQ2RMdU1HWUw2S3Z6WEdSU2dpM3lMZ2pld1F0Q1BrSVZ6NkQyUVF6CkNrY2hlQW1DSjhNcXlKdTV6bHp5Wk1qQXZubkFUNDV0UkF4ZWtyc3U5NHNRNGVnZFJDbmJXU0R0WTdraCtCSW0KbEpOWG9CMWxCTUVLSXE0UURVT1hvUmdmZnVEZ2hqZTFXckc5TUwrSGJpc3EveUZPR3dYRDlSaVg4RjZzdzZXNAphdkF1dkRzenVlNUwzc3o4NUsrRUM0WS93RlZETnZabzRUWVhhbzZaMGYrbFFLYzB0OERRWXprMU9YVnU4cnAyCnlKTUM2YWxMYkJmT0RBTFp2WUg3bjdkbzFBWmxzNEk5ZDFQNGpua0RyUW94QjNVcVE5aFZsM0xFS1E3M3hGMU8KeUs1R2hERFg4b1ZmR0tGNXUrZGVjSXNINFlhVHc3bVAzR0Z4SlNxdjMrMGxVRkpvaTVMYzVkYTE0OXA5MElkcwpoQ0V4cm9MMSs3bXJ5SWtYUGVGTTVUZ085cjBydlphQkZPdlYyejBncDM1WjArTDRXUGxidUVqTi9seFBGaW4rCkhsVWpyOGdSc0kzcWZKT1FGeS85cktJSlIwWS84T213dC84b1RXZ3kxbWRlSG1tams3ajFuWXN2QzlKU1E2WnYKTWxkbFRUS0IzemhUaFYxK1hXWXA2cmpkNUpXMXpiVldFa0xOeEU3R0pUaEVVRzNzemdCVkdQN3BTV1RVVHNxWApuTFJid0hPb3E3aEh3Zz09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0=
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Secret
|
||||
metadata:
|
||||
labels:
|
||||
app: harbor
|
||||
release: harbor
|
||||
name: harbor-core
|
||||
namespace: harbor
|
||||
type: Opaque
|
||||
data:
|
||||
CSRF_KEY: Tk9ORjNTYjZoZ2tIdlZmcXNlcTVEdjNhUlBjWDZ6Rjg=
|
||||
HARBOR_ADMIN_PASSWORD: UmxheG9kbXM5MCFA
|
||||
POSTGRESQL_PASSWORD: UmxheG9kbXM5MCFA
|
||||
REGISTRY_CREDENTIAL_PASSWORD: aGFyYm9yX3JlZ2lzdHJ5X3Bhc3N3b3Jk
|
||||
secret: RTRQY0FxZ3RPVmdKWTBRRw==
|
||||
secretKey: bm90LWEtc2VjdXJlLWtleQ==
|
||||
tls.crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUU5RENDQTl5Z0F3SUJBZ0lTQktsUkF1R24rM2N1R2xKS1o5aVY4Vmx4TUEwR0NTcUdTSWIzRFFFQkN3VUEKTURJeEN6QUpCZ05WQkFZVEFsVlRNUll3RkFZRFZRUUtFdzFNWlhRbmN5QkZibU55ZVhCME1Rc3dDUVlEVlFRRApFd0pTTXpBZUZ3MHlOREF6TURJeE5EQTVOVFZhRncweU5EQTFNekV4TkRBNU5UUmFNQmd4RmpBVUJnTlZCQU1NCkRTb3VhV04xY21abGNpNWpiMjB3Z2dFaU1BMEdDU3FHU0liM0RRRUJBUVVBQTRJQkR3QXdnZ0VLQW9JQkFRQ3oKQWVxVS9KSkJGWWJpeFQwbTRKTXU3QW5CdTVYRUFVSUhHendsR3ZjdjJXRTBxajNwU1JCeUdJWEo0eHdycnl3eAprYjgrRkxTSjh4U3Q2TXpwZjVxNTBQMm9PYklFdkMwY0drNHZuZThGVm1YckNKckNMaUtld0JBRWhFcC9IUjdYClVFSFRLVFpXTE5oUkIzNjMxZFkrcHhHU1AxeWNMblBXYkJQOUVSa2xzeUhoUnJpWHBxTmZDcGVIM3kxb3VJOUwKV3l5Yks3SUdmSkVzN1g0TE1OZ2RycEZtUzlCdTNZQ0JVMExZMlZtWVFJNVFaNkNhbisrQk51bVN6U0M4ZVRUaApJamY0Uk14R2JIUFNDYjBXb3hxM3M4RmZmQVd1a2JOSmhXSTlidXNucWxNTnRrQnREdFYxdVpaQUlLMno0cnFCCmlJbDlaS0lza3FEQUJaMWFSb0JkQWdNQkFBR2pnZ0ljTUlJQ0dEQU9CZ05WSFE4QkFmOEVCQU1DQmFBd0hRWUQKVlIwbEJCWXdGQVlJS3dZQkJRVUhBd0VHQ0NzR0FRVUZCd01DTUF3R0ExVWRFd0VCL3dRQ01BQXdIUVlEVlIwTwpCQllFRk51b3p0ZmprQ25FRGFxd01zVlBwdU5CaU5YaU1COEdBMVVkSXdRWU1CYUFGQlF1c3hlM1dGYkxybEFKClFPWWZyNTJMRk1MR01GVUdDQ3NHQVFVRkJ3RUJCRWt3UnpBaEJnZ3JCZ0VGQlFjd0FZWVZhSFIwY0RvdkwzSXoKTG04dWJHVnVZM0l1YjNKbk1DSUdDQ3NHQVFVRkJ6QUNoaFpvZEhSd09pOHZjak11YVM1c1pXNWpjaTV2Y21jdgpNQ1VHQTFVZEVRUWVNQnlDRFNvdWFXTjFjbVpsY2k1amIyMkNDMmxqZFhKbVpYSXVZMjl0TUJNR0ExVWRJQVFNCk1Bb3dDQVlHWjRFTUFRSUJNSUlCQkFZS0t3WUJCQUhXZVFJRUFnU0I5UVNCOGdEd0FIVUFPMU4zZFQ0dHVZQk8KaXpCYkJ2NUFPMmZZVDhQMHg3MEFEUzF5YitINjFCY0FBQUdOLzdidTJ3QUFCQU1BUmpCRUFpQkdEcW5xZytIcwpQUmVmYTc5TXdVZjlmUzFOYWh3SEsrRlJrVlg4REE2QUN3SWdPN2NsOU1IcC9hVVFSbkhZNFlRU01lMG5WbHhUCkpBY0RuY2syUkJQMFhBUUFkd0R1emRCazFkc2F6c1ZjdDUyMHpST2lNb2RHZkx6czNzTlJTRmxHY1IrMW13QUEKQVkzL3R1N0tBQUFFQXdCSU1FWUNJUUNTWTlxczV0ZFY2ejR5c01acG9yOXZXcmhsVXlScFNINVJIVGRQZGdlWQpsd0loQUpvblNHeVJOYmVNcEs3SW5uYVJxOVFuajB3R1hhWnVNMnZXTmlUYWFLTzBNQTBHQ1NxR1NJYjNEUUVCCkN3VUFBNElCQVFCMmlWcEttN0IxZ3p0a01Ud2QrQXBNOWh4SzkwYndWSTZxUnZLNmpsZVFJV0JCZG84Z3I0QlEKTlpPNDBWa21OaFhoY3ljQ1ZsSmlhT3JLd1J0c1VhMzVmc29BVTFCQzlodFRPT3R4TXYvb2lDZlA4aEZQNGttagpOTVFzNVZ2eFR6cmRjbWxhRmJaOWJkNVF2dko3L2hadTBnZ1ZrSUZVRXVZcWtQNFFzSHU1dXhOd01rWUY3RGUxCnVsVGY1YlFQcTJ0TEk5cTk1OUNsM2xMTTJqYklkM2h1bkRrMDFLZ2dSOWNkUmEzZnEzM2VZNkY2eWNWSVBPblMKdGhXck9melc5K2IrSFNDWHkyd3BJR0VTUTVJQU95cUdibnBBR1Z6U294UnVrNW1Wd0FqeDBaMW94eUdPRVprTgpEQUhHa21aNThIOUJpcXJ0VzBuaEMyKzN0cCtmR2kydwotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0t
|
||||
tls.key: LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JSUV2Z0lCQURBTkJna3Foa2lHOXcwQkFRRUZBQVNDQktnd2dnU2tBZ0VBQW9JQkFRQ3pBZXFVL0pKQkZZYmkKeFQwbTRKTXU3QW5CdTVYRUFVSUhHendsR3ZjdjJXRTBxajNwU1JCeUdJWEo0eHdycnl3eGtiOCtGTFNKOHhTdAo2TXpwZjVxNTBQMm9PYklFdkMwY0drNHZuZThGVm1YckNKckNMaUtld0JBRWhFcC9IUjdYVUVIVEtUWldMTmhSCkIzNjMxZFkrcHhHU1AxeWNMblBXYkJQOUVSa2xzeUhoUnJpWHBxTmZDcGVIM3kxb3VJOUxXeXliSzdJR2ZKRXMKN1g0TE1OZ2RycEZtUzlCdTNZQ0JVMExZMlZtWVFJNVFaNkNhbisrQk51bVN6U0M4ZVRUaElqZjRSTXhHYkhQUwpDYjBXb3hxM3M4RmZmQVd1a2JOSmhXSTlidXNucWxNTnRrQnREdFYxdVpaQUlLMno0cnFCaUlsOVpLSXNrcURBCkJaMWFSb0JkQWdNQkFBRUNnZ0VBQmdGVTNvOG82VHlManN6VVMvQ0JsNGtpY2FpZjhnTDRkVmNTcEl4YjlGNW0KbmxidUVVY0ZkczBVK0pjaElUa0tSK3ZEcytyZ3ZLRUE2d0w4bEMwVzk5QUhvUmxnWnJ3WkI2WG43MmZYdG9EZwphMEJadXIvRCtHU1Q2bEdLMDBBRmw4TzdsWlhVR3I0bk9wNnEvN0ttM09sZ3ZrY3R1RUtacnhJOG9HM1pWTFJOCmJMTUpLMFhMdGRSZDFIUWg4ZHNycDNldndYSUwzS3dnOEpDV2xEb2FPc0tCbUdxQU5LRTY4MDVNbm5uZWk5RlEKZ01lTFRxdmJzUkRJWFdpdDM4WEZLdmRBSUhnVTB3clh1djhXUXplYitjdnd0MFlRUEpyU0lraFFHUG10TlFQUgpHYWh3cGhlNXBVRUZranlxTXQxcHB2QmZTeFhWaU0zM3hlaEdZOTNtd1FLQmdRQzJWbjJPNWlmdUJUQVVqeDVyCkxoRTdGMWpnZGdZTWJRZUFjNDdUZkdXNjA1VGNlRk5TeDdBYk9tUHduR01xUWRiT0M4dEUzZXR3MURsV1hyRjcKL3NlRmxtVmduNWRWdGQxRWNoVUUvVVlxejIweldjSGpSN1lDbktmdDRIZmM3YWVmWGZZOG50TGVDUENtQVpsVgpycTVjSFUvOENLc3RwNmdHbVdFV0I0S25IUUtCZ1FEN1V2ODBxUzd6TDBsTFNWVTEycDMrUTl6NDU3MHgybmhOCmgvS3pnWnJpZ1FXMHRLdnlpRkdndHZ6V1BGMncvOUdDVDgyRHN2R2FMSURsa2o1VUpGalczUUQzWmxERFk5dEcKYU5zTEdwSkt4UDZwaEFwSUlMSjdYUXI2QXNWVm5yZXNSRGxZMU1LQXhFZGMxUHFNUk1sWEdpdzl3amdLQXA4UQpNZ2RYTlR1NlFRS0JnSDZmQzJ4YnlpalJjM1VqZWlWR0JYTTZvRjZudDBXVHhWemZZclRjc3l5TlY5Zk91MVpHCkU3YWswdGc1VWVmN2RyYjVtN3dFUEViTEtkSWZ5akxvV0JnZHUrTGdrTkJWamdYRkQzRzZqS3FZQnlaYzAzY0kKeW8xL3ltSTN1aVV5NkcrVWFiWHBPVmcxYnlCcEJkbHBoKzJ4OFdSOWhKb2N6bU5leWZ2cFZVTEZBb0dCQU1rZwpSNG4rSnN1SXVSQWQ5S292ZFNiSmFtcHJFaloyVHJaRktJNU5Gd1ZUR1p6ZXhZaEhYWVBQVFJHcHA1VUJkTW5qClVXV202OEJsQXhZMWJkbnFhSW95dlJZLzlEd1ppcDZUUlZCaWlGWjd4ZzBrMVJHWjBSdjJmdFZMS0Y3M3NLZVUKeFl2NFlGdXFPQzNyWjBLZnZiME4vZi9Da1JRNXVzKzhLYkc1c1QzQkFvR0JBSms2VmJvK3BtSE5ab0E2cDY5MApCY2lJRFJ3ZUJXQmZ2dmJ3ek8xbiswcE9IdEF1N1ZCS3ZmSGZ1bkhjMGNkdjdTdks0RjN3NW03blJBR3cxOXFnCjFreG5PZWFlazFGMG1aZWZaNGlqajVUSWtxTnlwQldkMEZYdHk5SUwwSEhMemxQU3VDb2pRVUJ3cG5PMTJ5cTYKMC92RFA0U1p3K2hWb3JORnZzMzhDVmZjCi0tLS0tRU5EIFBSSVZBVEUgS0VZLS0tLS0=
|
||||
---
|
||||
|
|
@ -0,0 +1,822 @@
|
|||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
labels:
|
||||
app: harbor
|
||||
release: harbor
|
||||
name: harbor-core
|
||||
namespace: harbor
|
||||
spec:
|
||||
ports:
|
||||
- name: http-web
|
||||
port: 80
|
||||
targetPort: 8080
|
||||
selector:
|
||||
app: harbor
|
||||
component: core
|
||||
release: harbor
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
labels:
|
||||
app: harbor
|
||||
release: harbor
|
||||
name: harbor-database
|
||||
namespace: harbor
|
||||
spec:
|
||||
ports:
|
||||
- port: 5432
|
||||
selector:
|
||||
app: harbor
|
||||
component: database
|
||||
release: harbor
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
labels:
|
||||
app: harbor
|
||||
release: harbor
|
||||
name: harbor-jobservice
|
||||
namespace: harbor
|
||||
spec:
|
||||
ports:
|
||||
- name: http-jobservice
|
||||
port: 80
|
||||
targetPort: 8080
|
||||
selector:
|
||||
app: harbor
|
||||
component: jobservice
|
||||
release: harbor
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
labels:
|
||||
app: harbor
|
||||
release: harbor
|
||||
name: harbor-portal
|
||||
namespace: harbor
|
||||
spec:
|
||||
ports:
|
||||
- port: 80
|
||||
targetPort: 8080
|
||||
selector:
|
||||
app: harbor
|
||||
component: portal
|
||||
release: harbor
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
labels:
|
||||
app: harbor
|
||||
release: harbor
|
||||
name: harbor-redis
|
||||
namespace: harbor
|
||||
spec:
|
||||
ports:
|
||||
- port: 6379
|
||||
selector:
|
||||
app: harbor
|
||||
component: redis
|
||||
release: harbor
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
labels:
|
||||
app: harbor
|
||||
release: harbor
|
||||
name: harbor-registry
|
||||
namespace: harbor
|
||||
spec:
|
||||
ports:
|
||||
- name: http-registry
|
||||
port: 5000
|
||||
- name: http-controller
|
||||
port: 8080
|
||||
selector:
|
||||
app: harbor
|
||||
component: registry
|
||||
release: harbor
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
labels:
|
||||
app: harbor
|
||||
release: harbor
|
||||
name: harbor-trivy
|
||||
namespace: harbor
|
||||
spec:
|
||||
ports:
|
||||
- name: http-trivy
|
||||
port: 8080
|
||||
protocol: TCP
|
||||
selector:
|
||||
app: harbor
|
||||
component: trivy
|
||||
release: harbor
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
labels:
|
||||
app: harbor
|
||||
component: jobservice
|
||||
release: harbor
|
||||
name: harbor-jobservice
|
||||
namespace: harbor
|
||||
spec:
|
||||
accessModes:
|
||||
- ReadWriteMany
|
||||
resources:
|
||||
requests:
|
||||
storage: 10Gi
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
labels:
|
||||
app: harbor
|
||||
component: registry
|
||||
release: harbor
|
||||
name: harbor-registry
|
||||
namespace: harbor
|
||||
spec:
|
||||
accessModes:
|
||||
- ReadWriteMany
|
||||
resources:
|
||||
requests:
|
||||
storage: 50Gi
|
||||
---
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
labels:
|
||||
app: harbor
|
||||
component: core
|
||||
release: harbor
|
||||
name: harbor-core
|
||||
namespace: harbor
|
||||
spec:
|
||||
replicas: 1
|
||||
revisionHistoryLimit: 10
|
||||
selector:
|
||||
matchLabels:
|
||||
app: harbor
|
||||
component: core
|
||||
release: harbor
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: harbor
|
||||
component: core
|
||||
release: harbor
|
||||
spec:
|
||||
automountServiceAccountToken: false
|
||||
containers:
|
||||
- env:
|
||||
- name: CORE_SECRET
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
key: secret
|
||||
name: harbor-core
|
||||
- name: JOBSERVICE_SECRET
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
key: JOBSERVICE_SECRET
|
||||
name: harbor-jobservice
|
||||
envFrom:
|
||||
- configMapRef:
|
||||
name: harbor-core
|
||||
- secretRef:
|
||||
name: harbor-core
|
||||
image: goharbor/harbor-core:v2.9.1
|
||||
imagePullPolicy: IfNotPresent
|
||||
livenessProbe:
|
||||
failureThreshold: 2
|
||||
httpGet:
|
||||
path: /api/v2.0/ping
|
||||
port: 8080
|
||||
scheme: HTTP
|
||||
periodSeconds: 10
|
||||
name: core
|
||||
ports:
|
||||
- containerPort: 8080
|
||||
readinessProbe:
|
||||
failureThreshold: 2
|
||||
httpGet:
|
||||
path: /api/v2.0/ping
|
||||
port: 8080
|
||||
scheme: HTTP
|
||||
periodSeconds: 10
|
||||
startupProbe:
|
||||
failureThreshold: 360
|
||||
httpGet:
|
||||
path: /api/v2.0/ping
|
||||
port: 8080
|
||||
scheme: HTTP
|
||||
initialDelaySeconds: 10
|
||||
periodSeconds: 10
|
||||
volumeMounts:
|
||||
- mountPath: /etc/core/app.conf
|
||||
name: config
|
||||
subPath: app.conf
|
||||
- mountPath: /etc/core/key
|
||||
name: secret-key
|
||||
subPath: key
|
||||
- mountPath: /etc/core/private_key.pem
|
||||
name: token-service-private-key
|
||||
subPath: tls.key
|
||||
- mountPath: /etc/core/ca
|
||||
name: ca-download
|
||||
- mountPath: /etc/core/token
|
||||
name: psc
|
||||
securityContext:
|
||||
fsGroup: 10000
|
||||
runAsUser: 10000
|
||||
terminationGracePeriodSeconds: 120
|
||||
volumes:
|
||||
- configMap:
|
||||
items:
|
||||
- key: app.conf
|
||||
path: app.conf
|
||||
name: harbor-core
|
||||
name: config
|
||||
- name: secret-key
|
||||
secret:
|
||||
items:
|
||||
- key: secretKey
|
||||
path: key
|
||||
secretName: harbor-core
|
||||
- name: token-service-private-key
|
||||
secret:
|
||||
secretName: harbor-core
|
||||
- name: ca-download
|
||||
secret:
|
||||
secretName: harbor-cacerts
|
||||
- emptyDir: {}
|
||||
name: psc
|
||||
---
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
labels:
|
||||
app: harbor
|
||||
component: jobservice
|
||||
release: harbor
|
||||
name: harbor-jobservice
|
||||
namespace: harbor
|
||||
spec:
|
||||
replicas: 1
|
||||
revisionHistoryLimit: 10
|
||||
selector:
|
||||
matchLabels:
|
||||
app: harbor
|
||||
component: jobservice
|
||||
release: harbor
|
||||
strategy:
|
||||
type: RollingUpdate
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: harbor
|
||||
component: jobservice
|
||||
release: harbor
|
||||
spec:
|
||||
automountServiceAccountToken: false
|
||||
containers:
|
||||
- env:
|
||||
- name: CORE_SECRET
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
key: secret
|
||||
name: harbor-core
|
||||
envFrom:
|
||||
- configMapRef:
|
||||
name: harbor-jobservice-env
|
||||
- secretRef:
|
||||
name: harbor-jobservice
|
||||
image: goharbor/harbor-jobservice:v2.9.1
|
||||
imagePullPolicy: IfNotPresent
|
||||
livenessProbe:
|
||||
httpGet:
|
||||
path: /api/v1/stats
|
||||
port: 8080
|
||||
scheme: HTTP
|
||||
initialDelaySeconds: 300
|
||||
periodSeconds: 10
|
||||
name: jobservice
|
||||
ports:
|
||||
- containerPort: 8080
|
||||
readinessProbe:
|
||||
httpGet:
|
||||
path: /api/v1/stats
|
||||
port: 8080
|
||||
scheme: HTTP
|
||||
initialDelaySeconds: 20
|
||||
periodSeconds: 10
|
||||
volumeMounts:
|
||||
- mountPath: /etc/jobservice/config.yml
|
||||
name: jobservice-config
|
||||
subPath: config.yml
|
||||
- mountPath: /var/log/jobs
|
||||
name: job-logs
|
||||
subPath: null
|
||||
securityContext:
|
||||
fsGroup: 10000
|
||||
runAsUser: 10000
|
||||
terminationGracePeriodSeconds: 120
|
||||
volumes:
|
||||
- configMap:
|
||||
name: harbor-jobservice
|
||||
name: jobservice-config
|
||||
- name: job-logs
|
||||
persistentVolumeClaim:
|
||||
claimName: harbor-jobservice
|
||||
---
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
labels:
|
||||
app: harbor
|
||||
component: portal
|
||||
release: harbor
|
||||
name: harbor-portal
|
||||
namespace: harbor
|
||||
spec:
|
||||
replicas: 1
|
||||
revisionHistoryLimit: 10
|
||||
selector:
|
||||
matchLabels:
|
||||
app: harbor
|
||||
component: portal
|
||||
release: harbor
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: harbor
|
||||
component: portal
|
||||
release: harbor
|
||||
spec:
|
||||
automountServiceAccountToken: false
|
||||
containers:
|
||||
- image: goharbor/harbor-portal:v2.9.1
|
||||
imagePullPolicy: IfNotPresent
|
||||
livenessProbe:
|
||||
httpGet:
|
||||
path: /
|
||||
port: 8080
|
||||
scheme: HTTP
|
||||
initialDelaySeconds: 300
|
||||
periodSeconds: 10
|
||||
name: portal
|
||||
ports:
|
||||
- containerPort: 8080
|
||||
readinessProbe:
|
||||
httpGet:
|
||||
path: /
|
||||
port: 8080
|
||||
scheme: HTTP
|
||||
initialDelaySeconds: 1
|
||||
periodSeconds: 10
|
||||
volumeMounts:
|
||||
- mountPath: /etc/nginx/nginx.conf
|
||||
name: portal-config
|
||||
subPath: nginx.conf
|
||||
securityContext:
|
||||
fsGroup: 10000
|
||||
runAsUser: 10000
|
||||
volumes:
|
||||
- configMap:
|
||||
name: harbor-portal
|
||||
name: portal-config
|
||||
---
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
labels:
|
||||
app: harbor
|
||||
component: registry
|
||||
release: harbor
|
||||
name: harbor-registry
|
||||
namespace: harbor
|
||||
spec:
|
||||
replicas: 1
|
||||
revisionHistoryLimit: 10
|
||||
selector:
|
||||
matchLabels:
|
||||
app: harbor
|
||||
component: registry
|
||||
release: harbor
|
||||
strategy:
|
||||
type: RollingUpdate
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: harbor
|
||||
component: registry
|
||||
release: harbor
|
||||
spec:
|
||||
automountServiceAccountToken: false
|
||||
containers:
|
||||
- args:
|
||||
- serve
|
||||
- /etc/registry/config.yml
|
||||
env: null
|
||||
envFrom:
|
||||
- secretRef:
|
||||
name: harbor-registry
|
||||
image: goharbor/registry-photon:v2.9.1
|
||||
imagePullPolicy: IfNotPresent
|
||||
livenessProbe:
|
||||
httpGet:
|
||||
path: /
|
||||
port: 5000
|
||||
scheme: HTTP
|
||||
initialDelaySeconds: 300
|
||||
periodSeconds: 10
|
||||
name: registry
|
||||
ports:
|
||||
- containerPort: 5000
|
||||
- containerPort: 5001
|
||||
readinessProbe:
|
||||
httpGet:
|
||||
path: /
|
||||
port: 5000
|
||||
scheme: HTTP
|
||||
initialDelaySeconds: 1
|
||||
periodSeconds: 10
|
||||
volumeMounts:
|
||||
- mountPath: /storage
|
||||
name: registry-data
|
||||
subPath: null
|
||||
- mountPath: /etc/registry/passwd
|
||||
name: registry-htpasswd
|
||||
subPath: passwd
|
||||
- mountPath: /etc/registry/config.yml
|
||||
name: registry-config
|
||||
subPath: config.yml
|
||||
- env:
|
||||
- name: CORE_SECRET
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
key: secret
|
||||
name: harbor-core
|
||||
- name: JOBSERVICE_SECRET
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
key: JOBSERVICE_SECRET
|
||||
name: harbor-jobservice
|
||||
envFrom:
|
||||
- configMapRef:
|
||||
name: harbor-registryctl
|
||||
- secretRef:
|
||||
name: harbor-registry
|
||||
- secretRef:
|
||||
name: harbor-registryctl
|
||||
image: goharbor/harbor-registryctl:v2.9.1
|
||||
imagePullPolicy: IfNotPresent
|
||||
livenessProbe:
|
||||
httpGet:
|
||||
path: /api/health
|
||||
port: 8080
|
||||
scheme: HTTP
|
||||
initialDelaySeconds: 300
|
||||
periodSeconds: 10
|
||||
name: registryctl
|
||||
ports:
|
||||
- containerPort: 8080
|
||||
readinessProbe:
|
||||
httpGet:
|
||||
path: /api/health
|
||||
port: 8080
|
||||
scheme: HTTP
|
||||
initialDelaySeconds: 1
|
||||
periodSeconds: 10
|
||||
volumeMounts:
|
||||
- mountPath: /storage
|
||||
name: registry-data
|
||||
subPath: null
|
||||
- mountPath: /etc/registry/config.yml
|
||||
name: registry-config
|
||||
subPath: config.yml
|
||||
- mountPath: /etc/registryctl/config.yml
|
||||
name: registry-config
|
||||
subPath: ctl-config.yml
|
||||
securityContext:
|
||||
fsGroup: 10000
|
||||
fsGroupChangePolicy: OnRootMismatch
|
||||
runAsUser: 10000
|
||||
terminationGracePeriodSeconds: 120
|
||||
volumes:
|
||||
- name: registry-htpasswd
|
||||
secret:
|
||||
items:
|
||||
- key: REGISTRY_HTPASSWD
|
||||
path: passwd
|
||||
secretName: harbor-registry-htpasswd
|
||||
- configMap:
|
||||
name: harbor-registry
|
||||
name: registry-config
|
||||
- name: registry-data
|
||||
persistentVolumeClaim:
|
||||
claimName: harbor-registry
|
||||
---
|
||||
apiVersion: apps/v1
|
||||
kind: StatefulSet
|
||||
metadata:
|
||||
labels:
|
||||
app: harbor
|
||||
component: database
|
||||
release: harbor
|
||||
name: harbor-database
|
||||
namespace: harbor
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: harbor
|
||||
component: database
|
||||
release: harbor
|
||||
serviceName: harbor-database
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: harbor
|
||||
component: database
|
||||
release: harbor
|
||||
spec:
|
||||
automountServiceAccountToken: false
|
||||
containers:
|
||||
- env:
|
||||
- name: PGDATA
|
||||
value: /var/lib/postgresql/data/pgdata
|
||||
envFrom:
|
||||
- secretRef:
|
||||
name: harbor-database
|
||||
image: goharbor/harbor-db:v2.9.1
|
||||
imagePullPolicy: IfNotPresent
|
||||
livenessProbe:
|
||||
exec:
|
||||
command:
|
||||
- /docker-healthcheck.sh
|
||||
initialDelaySeconds: 300
|
||||
periodSeconds: 10
|
||||
timeoutSeconds: 1
|
||||
name: database
|
||||
readinessProbe:
|
||||
exec:
|
||||
command:
|
||||
- /docker-healthcheck.sh
|
||||
initialDelaySeconds: 1
|
||||
periodSeconds: 10
|
||||
timeoutSeconds: 1
|
||||
volumeMounts:
|
||||
- mountPath: /var/lib/postgresql/data
|
||||
name: database-data
|
||||
- mountPath: /dev/shm
|
||||
name: shm-volume
|
||||
initContainers:
|
||||
- args:
|
||||
- -c
|
||||
- '[ -e /var/lib/postgresql/data/postgresql.conf ] && [ ! -d /var/lib/postgresql/data/pgdata
|
||||
] && mkdir -m 0700 /var/lib/postgresql/data/pgdata && mv /var/lib/postgresql/data/*
|
||||
/var/lib/postgresql/data/pgdata/ || true'
|
||||
command:
|
||||
- /bin/sh
|
||||
image: goharbor/harbor-db:v2.9.1
|
||||
imagePullPolicy: IfNotPresent
|
||||
name: data-migrator
|
||||
volumeMounts:
|
||||
- mountPath: /var/lib/postgresql/data
|
||||
name: database-data
|
||||
- args:
|
||||
- -c
|
||||
- chmod -R 700 /var/lib/postgresql/data/pgdata || true
|
||||
command:
|
||||
- /bin/sh
|
||||
image: goharbor/harbor-db:v2.9.1
|
||||
imagePullPolicy: IfNotPresent
|
||||
name: data-permissions-ensurer
|
||||
volumeMounts:
|
||||
- mountPath: /var/lib/postgresql/data
|
||||
name: database-data
|
||||
securityContext:
|
||||
fsGroup: 999
|
||||
runAsUser: 999
|
||||
terminationGracePeriodSeconds: 120
|
||||
volumes:
|
||||
- emptyDir:
|
||||
medium: Memory
|
||||
sizeLimit: 512Mi
|
||||
name: shm-volume
|
||||
volumeClaimTemplates:
|
||||
- metadata:
|
||||
annotations: null
|
||||
labels:
|
||||
app: harbor
|
||||
release: harbor
|
||||
name: database-data
|
||||
spec:
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
resources:
|
||||
requests:
|
||||
storage: 10Gi
|
||||
---
|
||||
apiVersion: apps/v1
|
||||
kind: StatefulSet
|
||||
metadata:
|
||||
labels:
|
||||
app: harbor
|
||||
component: redis
|
||||
release: harbor
|
||||
name: harbor-redis
|
||||
namespace: harbor
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: harbor
|
||||
component: redis
|
||||
release: harbor
|
||||
serviceName: harbor-redis
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: harbor
|
||||
component: redis
|
||||
release: harbor
|
||||
spec:
|
||||
automountServiceAccountToken: false
|
||||
containers:
|
||||
- image: goharbor/redis-photon:v2.9.1
|
||||
imagePullPolicy: IfNotPresent
|
||||
livenessProbe:
|
||||
initialDelaySeconds: 300
|
||||
periodSeconds: 10
|
||||
tcpSocket:
|
||||
port: 6379
|
||||
name: redis
|
||||
readinessProbe:
|
||||
initialDelaySeconds: 1
|
||||
periodSeconds: 10
|
||||
tcpSocket:
|
||||
port: 6379
|
||||
volumeMounts:
|
||||
- mountPath: /var/lib/redis
|
||||
name: data
|
||||
securityContext:
|
||||
fsGroup: 999
|
||||
runAsUser: 999
|
||||
terminationGracePeriodSeconds: 120
|
||||
volumeClaimTemplates:
|
||||
- metadata:
|
||||
annotations: null
|
||||
labels:
|
||||
app: harbor
|
||||
release: harbor
|
||||
name: data
|
||||
spec:
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
resources:
|
||||
requests:
|
||||
storage: 10Gi
|
||||
---
|
||||
apiVersion: apps/v1
|
||||
kind: StatefulSet
|
||||
metadata:
|
||||
labels:
|
||||
app: harbor
|
||||
component: trivy
|
||||
release: harbor
|
||||
name: harbor-trivy
|
||||
namespace: harbor
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: harbor
|
||||
component: trivy
|
||||
release: harbor
|
||||
serviceName: harbor-trivy
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: harbor
|
||||
component: trivy
|
||||
release: harbor
|
||||
spec:
|
||||
automountServiceAccountToken: false
|
||||
containers:
|
||||
- env:
|
||||
- name: HTTP_PROXY
|
||||
value: ""
|
||||
- name: HTTPS_PROXY
|
||||
value: ""
|
||||
- name: NO_PROXY
|
||||
value: harbor-core,harbor-jobservice,harbor-database,harbor-registry,harbor-portal,harbor-trivy,harbor-exporter,127.0.0.1,localhost,.local,.internal
|
||||
- name: SCANNER_LOG_LEVEL
|
||||
value: info
|
||||
- name: SCANNER_TRIVY_CACHE_DIR
|
||||
value: /home/scanner/.cache/trivy
|
||||
- name: SCANNER_TRIVY_REPORTS_DIR
|
||||
value: /home/scanner/.cache/reports
|
||||
- name: SCANNER_TRIVY_DEBUG_MODE
|
||||
value: "false"
|
||||
- name: SCANNER_TRIVY_VULN_TYPE
|
||||
value: os,library
|
||||
- name: SCANNER_TRIVY_TIMEOUT
|
||||
value: 5m0s
|
||||
- name: SCANNER_TRIVY_GITHUB_TOKEN
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
key: gitHubToken
|
||||
name: harbor-trivy
|
||||
- name: SCANNER_TRIVY_SEVERITY
|
||||
value: UNKNOWN,LOW,MEDIUM,HIGH,CRITICAL
|
||||
- name: SCANNER_TRIVY_IGNORE_UNFIXED
|
||||
value: "false"
|
||||
- name: SCANNER_TRIVY_SKIP_UPDATE
|
||||
value: "false"
|
||||
- name: SCANNER_TRIVY_OFFLINE_SCAN
|
||||
value: "false"
|
||||
- name: SCANNER_TRIVY_SECURITY_CHECKS
|
||||
value: vuln
|
||||
- name: SCANNER_TRIVY_INSECURE
|
||||
value: "false"
|
||||
- name: SCANNER_API_SERVER_ADDR
|
||||
value: :8080
|
||||
- name: SCANNER_REDIS_URL
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
key: redisURL
|
||||
name: harbor-trivy
|
||||
- name: SCANNER_STORE_REDIS_URL
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
key: redisURL
|
||||
name: harbor-trivy
|
||||
- name: SCANNER_JOB_QUEUE_REDIS_URL
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
key: redisURL
|
||||
name: harbor-trivy
|
||||
image: goharbor/trivy-adapter-photon:v2.9.1
|
||||
imagePullPolicy: IfNotPresent
|
||||
livenessProbe:
|
||||
failureThreshold: 10
|
||||
httpGet:
|
||||
path: /probe/healthy
|
||||
port: api-server
|
||||
scheme: HTTP
|
||||
initialDelaySeconds: 5
|
||||
periodSeconds: 10
|
||||
successThreshold: 1
|
||||
name: trivy
|
||||
ports:
|
||||
- containerPort: 8080
|
||||
name: api-server
|
||||
readinessProbe:
|
||||
failureThreshold: 3
|
||||
httpGet:
|
||||
path: /probe/ready
|
||||
port: api-server
|
||||
scheme: HTTP
|
||||
initialDelaySeconds: 5
|
||||
periodSeconds: 10
|
||||
successThreshold: 1
|
||||
resources:
|
||||
limits:
|
||||
cpu: 1
|
||||
memory: 1Gi
|
||||
requests:
|
||||
cpu: 200m
|
||||
memory: 512Mi
|
||||
securityContext:
|
||||
allowPrivilegeEscalation: false
|
||||
privileged: false
|
||||
volumeMounts:
|
||||
- mountPath: /home/scanner/.cache
|
||||
name: data
|
||||
readOnly: false
|
||||
securityContext:
|
||||
fsGroup: 10000
|
||||
runAsUser: 10000
|
||||
volumeClaimTemplates:
|
||||
- metadata:
|
||||
labels:
|
||||
app: harbor
|
||||
release: harbor
|
||||
name: data
|
||||
spec:
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
resources:
|
||||
requests:
|
||||
storage: 50Gi
|
||||
|
|
@ -0,0 +1,64 @@
|
|||
apiVersion: networking.k8s.io/v1
|
||||
kind: Ingress
|
||||
metadata:
|
||||
annotations:
|
||||
ingress.kubernetes.io/proxy-body-size: "0"
|
||||
nginx.ingress.kubernetes.io/proxy-body-size: "0"
|
||||
#nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
|
||||
labels:
|
||||
app: harbor
|
||||
release: harbor
|
||||
name: harbor-ingress
|
||||
namespace: harbor
|
||||
spec:
|
||||
ingressClassName: nginx
|
||||
#tls:
|
||||
#- hosts:
|
||||
# - "harbor.icurfer.com"
|
||||
# secretName: secret-harbor-ssl
|
||||
rules:
|
||||
- host: harbor.icurfer.com
|
||||
http:
|
||||
paths:
|
||||
- backend:
|
||||
service:
|
||||
name: harbor-core
|
||||
port:
|
||||
number: 80
|
||||
path: /api/
|
||||
pathType: Prefix
|
||||
- backend:
|
||||
service:
|
||||
name: harbor-core
|
||||
port:
|
||||
number: 80
|
||||
path: /service/
|
||||
pathType: Prefix
|
||||
- backend:
|
||||
service:
|
||||
name: harbor-core
|
||||
port:
|
||||
number: 80
|
||||
path: /v2/
|
||||
pathType: Prefix
|
||||
- backend:
|
||||
service:
|
||||
name: harbor-core
|
||||
port:
|
||||
number: 80
|
||||
path: /chartrepo/
|
||||
pathType: Prefix
|
||||
- backend:
|
||||
service:
|
||||
name: harbor-core
|
||||
port:
|
||||
number: 80
|
||||
path: /c/
|
||||
pathType: Prefix
|
||||
- backend:
|
||||
service:
|
||||
name: harbor-portal
|
||||
port:
|
||||
number: 80
|
||||
path: /
|
||||
pathType: Prefix
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
#!/usr/bin/python3
|
||||
import os
|
||||
import subprocess
|
||||
|
||||
pv_str = os.popen("kubectl get -n default pv | grep harbor | awk '$1 > 0 {print $1}'").read()
|
||||
print(pv_str)
|
||||
pv_list = pv_str.split('\n')
|
||||
i = 0
|
||||
for pv in pv_list:
|
||||
print(pv)
|
||||
# os.system(f"kubectl delete -n {ns} pv {pv}")
|
||||
os.system(f"kubectl delete pv {pv}")
|
||||
Loading…
Reference in New Issue