From 2d831e9960dde3d5c018db39b52eaf833d78cd43 Mon Sep 17 00:00:00 2001 From: Amarpreet Minhas Date: Sun, 16 Apr 2023 22:23:02 +0000 Subject: [PATCH] Add second istio ingressgateway to split internal and external traffic, add photoprism --- helm/apps/goldpinger/istio-ingress.yaml | 2 +- helm/apps/photos/external-secrets.yaml | 59 ++++++++++++++++++++++ helm/apps/photos/install.sh | 36 ++++++++++++++ helm/apps/photos/istio-ingress.yaml | 65 +++++++++++++++++++++++++ helm/apps/photos/values.yaml | 40 +++++++++++++++ helm/setup/istio/istio.yaml | 19 ++++++++ helm/setup/longhorn/istio-ingress.yaml | 2 +- 7 files changed, 221 insertions(+), 2 deletions(-) create mode 100644 helm/apps/photos/external-secrets.yaml create mode 100755 helm/apps/photos/install.sh create mode 100644 helm/apps/photos/istio-ingress.yaml create mode 100644 helm/apps/photos/values.yaml create mode 100644 helm/setup/istio/istio.yaml diff --git a/helm/apps/goldpinger/istio-ingress.yaml b/helm/apps/goldpinger/istio-ingress.yaml index 593bf2f..4c89172 100644 --- a/helm/apps/goldpinger/istio-ingress.yaml +++ b/helm/apps/goldpinger/istio-ingress.yaml @@ -22,7 +22,7 @@ metadata: namespace: goldpinger spec: selector: - istio: ingressgateway + istio: ingressgateway-internal servers: - port: number: 443 diff --git a/helm/apps/photos/external-secrets.yaml b/helm/apps/photos/external-secrets.yaml new file mode 100644 index 0000000..3c0995e --- /dev/null +++ b/helm/apps/photos/external-secrets.yaml @@ -0,0 +1,59 @@ +--- +apiVersion: v1 +kind: Secret +type: kubernetes.io/service-account-token +metadata: + name: serviceaccounttoken + namespace: photos + annotations: + kubernetes.io/service-account.name: "photos" +... +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: photos-tokenreview-binding +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: system:auth-delegator +subjects: +- kind: ServiceAccount + name: photos + namespace: photos +... +--- +apiVersion: external-secrets.io/v1beta1 +kind: SecretStore +metadata: + name: photos + namespace: photos +spec: + provider: + vault: + server: "https://vault.service.masked.name:8200" + path: "kv" + version: "v2" + caBundle: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUROVENDQWgyZ0F3SUJBZ0lVWXA4eG81dDJsSkZQM1NpRDFmSmlyZ0dVUUowd0RRWUpLb1pJaHZjTkFRRUwKQlFBd0ZqRVVNQklHQTFVRUF4TUxiV0Z6YTJWa0xtNWhiV1V3SGhjTk1qQXdPREk1TVRreU16RXlXaGNOTXpBdwpPREkzTVRreU16UXlXakFXTVJRd0VnWURWUVFERXd0dFlYTnJaV1F1Ym1GdFpUQ0NBU0l3RFFZSktvWklodmNOCkFRRUJCUUFEZ2dFUEFEQ0NBUW9DZ2dFQkFNSTdvUitLSHZ2em5mbmFBWERNTzVxcFNUQ0FZQ3lmakZFb2hZSmYKbE9jbkxPTlhiM2Y2c1A1ZDFlbHRMK1VUcTBSVlU1VVAwYU5XN2hxRFRhNDFNUncwSkNEdEI2OHlLZFlxMmhaZgo5N2dBK2xqM01FSlU2UlRBS0xyZzc1R1JoL0FiTkVJZ3d2UHVIS1c2aE1idHdPeU05REZVLy9XM3hwdXNhbFh5ClJNRnpBSGZTRGo5Y2krVXlnVXQ5SElOV2QvU21NR0cvOFBnaGFSaGZFNDR3UkZNcVllemVsaUl0MkpJczQzQlYKN0hxRzBPZXY5V1BlWG1pYVpVWUtRZXRIaVFxUjE0TXhpdjFJR3pDbXd3Tis5YjR0WnRaVGE1OG9NNWRQWGZiYgpsckVMUUU1T3NQYU50TXRFUjNNZ3hvdkROM1ZTQ0dIL08vR3lhRVdWYW5ZNVVGOENBd0VBQWFON01Ia3dEZ1lEClZSMFBBUUgvQkFRREFnRUdNQThHQTFVZEV3RUIvd1FGTUFNQkFmOHdIUVlEVlIwT0JCWUVGQlk4alczZkRWVXAKVVJ0MXByaG1ETWprVmlrZ01COEdBMVVkSXdRWU1CYUFGQlk4alczZkRWVXBVUnQxcHJobURNamtWaWtnTUJZRwpBMVVkRVFRUE1BMkNDMjFoYzJ0bFpDNXVZVzFsTUEwR0NTcUdTSWIzRFFFQkN3VUFBNElCQVFBV1F6NGQzUXpFClc4TkdBMTZaUGFtbFZ1Yk9MQjVEdFp6MnFyU3JuM0RlT2JMSURTaEluVjNxdFJsRHg5SFlKTFRDQTc1S2V0MEoKTlRzeU1jVHkydHhkNEk4aGdkRjMwWEplRWNpTjl3WjBtS0VlUC9ZS0R3ZThWMlh3V3E0WFlrRGVjaGxXSHBabwpQZldjb0xwckt3VlVJNEh6YXFrTm13Y21NVUk0eEFzQytTTGUxbXJlYnNlS200OW9Pd2RRcy9vUFZMSyswbkVwClJ2RDBhT3ZvaElMSWEvMlp0S2N6dmhCL0wzZm81cGc5RXgvMEpEQmRESEllZE1hYkQzcW44SWRzZStQNURmd2EKSnUyQ3R5YituMVRUUHhSRE14czJjRmJBNWlycisyQVJKZDhqdEdTKzFmeXhvZ2pPV1MxUlI1MjNGK3FJUzNzdQpLaWJHZWwrZ0ZQcHEKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQotLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KTUlJRDB6Q0NBcnVnQXdJQkFnSVVNNTJ1aFhTZVRDaW0xcG16dWNtL2NuSWdOcDh3RFFZSktvWklodmNOQVFFTApCUUF3RmpFVU1CSUdBMVVFQXhNTGJXRnphMlZrTG01aGJXVXdIaGNOTWpBd09ESTVNVGt5TnpBd1doY05NalV3Ck9ESTRNVGt5TnpNd1dqQXRNU3N3S1FZRFZRUURFeUp0WVhOclpXUXVibUZ0WlNCSmJuUmxjbTFsWkdsaGRHVWcKUVhWMGFHOXlhWFI1TUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUE4THVHbytBcwpJQ1lXZEpqQkNZMHNuRi9YK2pGMXRkY3JRek5pUktFU0ViNWRzRGl5OTc5YnVnQ2JsUFFEUStnNVdHcVhYNHBqClV5WlpFM1p3aE91ZklTbEdLMG93MWFNanFTK3BGbFE4NUtSRC9qVXRMUFJVSnVRRittMll3SWQvTWc2L0I3UWsKZDE2NnVKa054UytNR1pDaTJPWVhlb2l2bk9ZN1EwS2ovMHZJYmM1VnQza0NSVmcybGpMU1Fob0JkKzg1QUhNUgpqZVJqWk1lWUVZRjJIVFZ3cmc0RHJDL3IwME1WdERjTnFzNitNN1laL3J6bnk3M0d2ZkpXZldvQjFDNHBpWmxnCmZ2VWNTREw1SEFoaml1NWNTZUlSN0RUdVZ4N3Q0UG9LNkFxVWtQeWdEdHExWmFMeWJYVDdYNmQwNzJkUjVBWE8KbldGTFBhYUdKOTc5aXdJREFRQUJvNElCQURDQi9UQU9CZ05WSFE4QkFmOEVCQU1DQVFZd0R3WURWUjBUQVFILwpCQVV3QXdFQi96QWRCZ05WSFE0RUZnUVVJa2hWWUJhSzlDY3ZYRzhGTTJqS1ZaMTZvWkF3SHdZRFZSMGpCQmd3CkZvQVVGanlOYmQ4TlZTbFJHM1dtdUdZTXlPUldLU0F3VVFZSUt3WUJCUVVIQVFFRVJUQkRNRUVHQ0NzR0FRVUYKQnpBQ2hqVm9kSFJ3T2k4dmRtRjFiSFF1WTI5c2RXMWlhV0V1YldGemEyVmtMbTVoYldVNk9ESXdNQzkyTVM5dwphMmxmY205dmRDOWpZVEJIQmdOVkhSOEVRREErTUR5Z09xQTRoalpvZEhSd09pOHZkbUYxYkhRdVkyOXNkVzFpCmFXRXViV0Z6YTJWa0xtNWhiV1U2T0RJd01DOTJNUzl3YTJsZmNtOXZkQzlqY213d0RRWUpLb1pJaHZjTkFRRUwKQlFBRGdnRUJBSzZITWdSK2hwd2paQ21mNU5zekRTSHI3ZFlLWlhQNExyY0hQV3M5NG5MTTMzVVo1NzJ1YkdIcwpkS2pSdzhZRDBjbmNyc3lwc1ltRWdSNTdVK0RIa3lzMzk0d2tiN1VPd3kxWnZkNUlJUlhkUDBjRHlsejBRenFNCkFQblFZTitpc21rb2xqaGs5ZXkwUWJvM0NtUGpNK1VRY0F4dVpRdEE0TStyaUMxK2prdWRlMXVZTDBzekM2WTkKNEtldGZ2Yk5rZWRTYVY1eUphUktDQmhSY0M0L0dqcEJHL29kUS81QWZCUEFGalpxaGNJSldCclZZYlRRVkM3OQpoTUExaXdXSlBtVDlMc2pNU1VmeEZUUHp4Um5OWFFpS0Z6NWtUMk9pUzFucWg4YU9jeVU5WUM5Mjhwa2lmTkpWCktva3VEZXpKRk03aWUzZCtFY0JrMVY5bEh3T1dkdG89Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K + auth: + kubernetes: + mountPath: "k8s-teapot" + role: "photos" + secretRef: + name: "serviceaccounttoken" +... +--- +apiVersion: external-secrets.io/v1beta1 +kind: ExternalSecret +metadata: + name: photos + namespace: photos +spec: + secretStoreRef: + name: photos + kind: SecretStore + data: + - secretKey: PHOTOPRISM_ADMIN_PASSWORD + remoteRef: + key: photoview + property: PHOTOPRISM_ADMIN_PASSWORD diff --git a/helm/apps/photos/install.sh b/helm/apps/photos/install.sh new file mode 100755 index 0000000..b16b526 --- /dev/null +++ b/helm/apps/photos/install.sh @@ -0,0 +1,36 @@ +#!/bin/bash +NAMESPACE=photos +VAULT_AUTH_NAMESPACE="k8s-teapot" + +kubectl create ns ${NAMESPACE} +kubectl create serviceaccount -n ${NAMESPACE} photos +kubectl apply -n ${NAMESPACE} -f external-secrets.yaml + +HOST_IP=$(ip addr show eth0 | grep -Po 'inet \K[\d.]+') +TOKEN="$(kubectl get secret serviceaccounttoken -n photos -o go-template='{{ .data.token }}' | base64 -d)" + +cat << EOH > photos.hcl +path "kv/data/photoview" { + capabilities = ["read"] +} +EOH +vault policy write photos photos.hcl +rm photos.hcl + +vault write auth/${VAULT_AUTH_NAMESPACE}/role/photos \ + bound_service_account_names=photos \ + bound_service_account_namespaces=photos \ + policies=photos \ + ttl=24h + +vault write auth/${VAULT_AUTH_NAMESPACE}/login role=photos jwt=${TOKEN} iss=https://${HOST_IP}:6443 + +helm repo add p80n https://p80n.github.io/photoprism-helm/ +helm repo update + +helm upgrade --install \ + photos \ + p80n/photoprism \ + -f values.yaml \ + -n ${NAMESPACE} \ + --cleanup-on-fail diff --git a/helm/apps/photos/istio-ingress.yaml b/helm/apps/photos/istio-ingress.yaml new file mode 100644 index 0000000..66c236a --- /dev/null +++ b/helm/apps/photos/istio-ingress.yaml @@ -0,0 +1,65 @@ +--- +apiVersion: cert-manager.io/v1 +kind: Certificate +metadata: + name: photos-cert + namespace: istio-system +spec: + secretName: photos-cert + commonName: photos.minhas.io + dnsNames: + - photos.minhas.io + issuerRef: + name: letsencrypt-prod + kind: ClusterIssuer + group: cert-manager.io +... +--- +apiVersion: networking.istio.io/v1beta1 +kind: Gateway +metadata: + name: photos-gateway + namespace: photos +spec: + selector: + istio: ingressgateway + servers: + - port: + number: 443 + name: https + protocol: HTTPS + tls: + mode: SIMPLE + credentialName: photos-cert + hosts: + - photos.minhas.io + - port: + number: 80 + name: http + protocol: HTTP + tls: + httpsRedirect: true + hosts: + - photos.minhas.io +... +--- +apiVersion: networking.istio.io/v1beta1 +kind: VirtualService +metadata: + name: photos + namespace: photos +spec: + hosts: + - photos.minhas.io + gateways: + - photos-gateway + http: + - match: + - uri: + prefix: / + route: + - destination: + port: + number: 80 + host: photos-photoprism +... diff --git a/helm/apps/photos/values.yaml b/helm/apps/photos/values.yaml new file mode 100644 index 0000000..e0b12ed --- /dev/null +++ b/helm/apps/photos/values.yaml @@ -0,0 +1,40 @@ +image: + tag: latest + +existingSecret: photos + +config: + PHOTOPRISM_SITE_URL: "https://photos.minhas.io/" + PHOTOPRISM_SITE_CAPTION: "Asara's Photos" + PHOTOPRISM_SITE_DESCRIPTION: "Some photos I took that I like" + PHOTOPRISM_SITE_AUTHOR: "@Asara:devvul.com" + PHOTOPRISM_DEBUG: false + PHOTOPRISM_READONLY: false + PHOTOPRISM_DISABLE_WEBDAV: true + PHOTOPRISM_DISABLE_TENSORFLOW: true + +persistence: + enabled: true + storagePath: &storagePath /photoprism/storage + originalsPath: &originalsPath /photoprism/originals + + volumeMounts: + - name: photoprism + mountPath: *originalsPath + subPath: storage + - name: photoprism + subPath: originals + mountPath: *storagePath + volumes: + - name: photoprism + persistentVolumeClaim: + claimName: photoprism + volumeClaimTemplates: + - metadata: + name: photoprism + spec: + accessModes: [ "ReadWriteOnce" ] + storageClassName: "longhorn-retain" + resources: + requests: + storage: 20Gi diff --git a/helm/setup/istio/istio.yaml b/helm/setup/istio/istio.yaml new file mode 100644 index 0000000..9160a75 --- /dev/null +++ b/helm/setup/istio/istio.yaml @@ -0,0 +1,19 @@ +--- +apiVersion: install.istio.io/v1alpha1 +kind: IstioOperator +metadata: + name: ingress +spec: + profile: empty # Do not install CRDs or the control plane + components: + ingressGateways: + - name: istio-ingressgateway + namespace: istio-system + enabled: true + label: + istio: ingressgateway + - name: istio-ingressgateway-internal + namespace: istio-system + enabled: true + label: + istio: ingressgateway-internal diff --git a/helm/setup/longhorn/istio-ingress.yaml b/helm/setup/longhorn/istio-ingress.yaml index 8efb058..3defb64 100644 --- a/helm/setup/longhorn/istio-ingress.yaml +++ b/helm/setup/longhorn/istio-ingress.yaml @@ -22,7 +22,7 @@ metadata: namespace: longhorn-system spec: selector: - istio: ingressgateway + istio: ingressgateway-internal servers: - port: number: 443