feat: update network and cert-manager ns (#1263)

* feat: update network and cert-manager ns

Signed-off-by: Devin Buhl <devin@buhl.casa>

* fix: update sops var name to be consistent with env

Signed-off-by: Devin Buhl <devin@buhl.casa>

---------

Signed-off-by: Devin Buhl <devin@buhl.casa>
This commit is contained in:
Devin Buhl authored and GitHub committed 2024-01-26 18:48:35 -05:00
1 parent 4ac206aef5
commit 3b0fcb7ba5
27 files changed
+122 -106

No files matched your search

+2 -2
View File
@@ -18,14 +18,14 @@ tasks:
- kubectl apply --kubeconfig {{.KUBECONFIG_FILE}} --server-side --filename https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/{{.PROMETHEUS_OPERATOR_VERSION}}/example/prometheus-operator-crd/monitoring.coreos.com_scrapeconfigs.yaml - kubectl apply --kubeconfig {{.KUBECONFIG_FILE}} --server-side --filename https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/{{.PROMETHEUS_OPERATOR_VERSION}}/example/prometheus-operator-crd/monitoring.coreos.com_scrapeconfigs.yaml
- kubectl apply --kubeconfig {{.KUBECONFIG_FILE}} --server-side --filename https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/{{.PROMETHEUS_OPERATOR_VERSION}}/example/prometheus-operator-crd/monitoring.coreos.com_servicemonitors.yaml - kubectl apply --kubeconfig {{.KUBECONFIG_FILE}} --server-side --filename https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/{{.PROMETHEUS_OPERATOR_VERSION}}/example/prometheus-operator-crd/monitoring.coreos.com_servicemonitors.yaml
- kubectl apply --kubeconfig {{.KUBECONFIG_FILE}} --server-side --kustomize {{.KUBERNETES_DIR}}/bootstrap - kubectl apply --kubeconfig {{.KUBECONFIG_FILE}} --server-side --kustomize {{.KUBERNETES_DIR}}/bootstrap
- cat {{.SOPS_AGE_FILE}} | kubectl -n flux-system create secret generic sops-age --from-file=age.agekey=/dev/stdin - cat {{.SOPS_AGE_KEY_FILE}} | kubectl -n flux-system create secret generic sops-age --from-file=age.agekey=/dev/stdin
- sops --decrypt {{.CLUSTER_SECRET_SOPS_FILE}} | kubectl apply --kubeconfig {{.KUBECONFIG_FILE}} --server-side --filename - - sops --decrypt {{.CLUSTER_SECRET_SOPS_FILE}} | kubectl apply --kubeconfig {{.KUBECONFIG_FILE}} --server-side --filename -
- kubectl apply --kubeconfig {{.KUBECONFIG_FILE}} --server-side --filename {{.CLUSTER_SETTINGS_FILE}} - kubectl apply --kubeconfig {{.KUBECONFIG_FILE}} --server-side --filename {{.CLUSTER_SETTINGS_FILE}}
- kubectl apply --kubeconfig {{.KUBECONFIG_FILE}} --server-side --kustomize {{.KUBERNETES_DIR}}/flux/config - kubectl apply --kubeconfig {{.KUBECONFIG_FILE}} --server-side --kustomize {{.KUBERNETES_DIR}}/flux/config
preconditions: preconditions:
- { msg: "Missing kubeconfig", sh: "test -f {{.KUBECONFIG_FILE}}" } - { msg: "Missing kubeconfig", sh: "test -f {{.KUBECONFIG_FILE}}" }
- { msg: "Flux already installed", sh: "kubectl get namespace flux-system --kubeconfig {{.KUBECONFIG_FILE}} &>/dev/null && exit 1 || exit 0" } - { msg: "Flux already installed", sh: "kubectl get namespace flux-system --kubeconfig {{.KUBECONFIG_FILE}} &>/dev/null && exit 1 || exit 0" }
- { msg: "Missing Sops Age key file", sh: "test -f {{.SOPS_AGE_FILE}}" } - { msg: "Missing Sops Age key file", sh: "test -f {{.SOPS_AGE_KEY_FILE}}" }
apply: apply:
desc: Apply a Flux Kustomization resource for a cluster desc: Apply a Flux Kustomization resource for a cluster
+3 -3
View File
@@ -9,9 +9,9 @@ tasks:
age-keygen: age-keygen:
desc: Initialize Age Key for Sops desc: Initialize Age Key for Sops
cmd: age-keygen --output {{.SOPS_AGE_FILE}} cmd: age-keygen --output {{.SOPS_AGE_KEY_FILE}}
status: status:
- test -f "{{.SOPS_AGE_FILE}}" - test -f "{{.SOPS_AGE_KEY_FILE}}"
encrypt: encrypt:
desc: Encrypt all Kubernetes SOPS secrets that are not already encrypted desc: Encrypt all Kubernetes SOPS secrets that are not already encrypted
@@ -31,7 +31,7 @@ tasks:
vars: ["file"] vars: ["file"]
preconditions: preconditions:
- { msg: "Missing Sops config file", sh: "test -f {{.SOPS_CONFIG_FILE}}" } - { msg: "Missing Sops config file", sh: "test -f {{.SOPS_CONFIG_FILE}}" }
- { msg: "Missing Sops Age key file", sh: "test -f {{.SOPS_AGE_FILE}}" } - { msg: "Missing Sops Age key file", sh: "test -f {{.SOPS_AGE_KEY_FILE}}" }
.reset: .reset:
internal: true internal: true
+2 -2
View File
@@ -455,7 +455,7 @@ _Mic check, 1, 2_ - In a few moments applications should be lighting up like Chr
#### 🌐 Public DNS #### 🌐 Public DNS
The `external-dns` application created in the `networking` namespace will handle creating public DNS records. By default, `echo-server` and the `flux-webhook` are the only subdomains reachable from the public internet. In order to make additional applications public you must set set the correct ingress class name and ingress annotations like in the HelmRelease for `echo-server`. The `external-dns` application created in the `networking` namespace will handle creating public DNS records. By default, `echo-server-external` and the `flux-webhook` are the only subdomains reachable from the public internet. In order to make additional applications public you must set set the correct ingress class name and ingress annotations like in the HelmRelease for `echo-server`.
#### 🏠 Home DNS #### 🏠 Home DNS
@@ -469,7 +469,7 @@ The `external-dns` application created in the `networking` namespace will handle
> server=/${bootstrap_cloudflare_domain}/${bootstrap_k8s_gateway_addr} > server=/${bootstrap_cloudflare_domain}/${bootstrap_k8s_gateway_addr}
> ``` > ```
> 2. Restart dnsmasq on the server. > 2. Restart dnsmasq on the server.
> 3. Query an internal-only subdomain from your workstation (any `internal` class ingresses): `dig @${home-dns-server-ip} hubble.${bootstrap_cloudflare_domain}`. It should resolve to `${bootstrap_internal_ingress_addr}`. > 3. Query an internal-only subdomain from your workstation (any `internal` class ingresses): `dig @${home-dns-server-ip} echo-server-internal.${bootstrap_cloudflare_domain}`. It should resolve to `${bootstrap_internal_ingress_addr}`.
If you're having trouble with DNS be sure to check out these two GitHub discussions: [Internal DNS](https://github.com/onedr0p/flux-cluster-template/discussions/719) and [Pod DNS resolution broken](https://github.com/onedr0p/flux-cluster-template/discussions/635). If you're having trouble with DNS be sure to check out these two GitHub discussions: [Internal DNS](https://github.com/onedr0p/flux-cluster-template/discussions/719) and [Pod DNS resolution broken](https://github.com/onedr0p/flux-cluster-template/discussions/635).
+1 -1
View File
@@ -13,7 +13,7 @@ vars:
KUBECONFIG_FILE: "{{.ROOT_DIR}}/kubeconfig" KUBECONFIG_FILE: "{{.ROOT_DIR}}/kubeconfig"
MAKEJINJA_CONFIG_FILE: "{{.ROOT_DIR}}/makejinja.toml" MAKEJINJA_CONFIG_FILE: "{{.ROOT_DIR}}/makejinja.toml"
PIP_REQUIREMENTS_FILE: "{{.ROOT_DIR}}/requirements.txt" PIP_REQUIREMENTS_FILE: "{{.ROOT_DIR}}/requirements.txt"
SOPS_AGE_FILE: "{{.ROOT_DIR}}/age.key" SOPS_AGE_KEY_FILE: "{{.ROOT_DIR}}/age.key"
# Binaries # Binaries
PYTHON_BIN: python3 PYTHON_BIN: python3
# Python # Python
@@ -0,0 +1,23 @@
---
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: &app cert-manager-issuers
namespace: flux-system
spec:
targetNamespace: cert-manager
commonMetadata:
labels:
app.kubernetes.io/name: *app
dependsOn:
- name: cert-manager
path: ./kubernetes/apps/cert-manager/cert-manager-issuers/app
prune: true
sourceRef:
kind: GitRepository
name: home-kubernetes
wait: true
interval: 30m
retryInterval: 1m
timeout: 5m
@@ -18,25 +18,3 @@ spec:
interval: 30m interval: 30m
retryInterval: 1m retryInterval: 1m
timeout: 5m timeout: 5m
---
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: &app cert-manager-issuers
namespace: flux-system
spec:
targetNamespace: cert-manager
commonMetadata:
labels:
app.kubernetes.io/name: *app
dependsOn:
- name: cert-manager
path: ./kubernetes/apps/cert-manager/cert-manager/issuers
prune: true
sourceRef:
kind: GitRepository
name: home-kubernetes
wait: true
interval: 30m
retryInterval: 1m
timeout: 5m
@@ -4,3 +4,4 @@ kind: Kustomization
resources: resources:
- ./namespace.yaml - ./namespace.yaml
- ./cert-manager/ks.yaml - ./cert-manager/ks.yaml
- ./cert-manager-issuers/ks.yaml
@@ -11,3 +11,4 @@ resources:
#% if bootstrap_distribution in ['k0s', 'talos'] %# #% if bootstrap_distribution in ['k0s', 'talos'] %#
- ./spegel/ks.yaml - ./spegel/ks.yaml
#% endif %# #% endif %#
- ./reloader/ks.yaml
@@ -0,0 +1,22 @@
---
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: &app certificates
namespace: flux-system
spec:
targetNamespace: network
commonMetadata:
labels:
app.kubernetes.io/name: *app
dependsOn:
- name: cert-manager-issuers
path: ./kubernetes/apps/network/certificates/app
prune: true
sourceRef:
kind: GitRepository
name: home-kubernetes
wait: true
interval: 30m
retryInterval: 1m
timeout: 5m
@@ -1,14 +1,10 @@
--- ---
originRequest: originRequest:
http2Origin: true originServerName: "external.${SECRET_DOMAIN}"
ingress: ingress:
- hostname: "${SECRET_DOMAIN}" - hostname: "${SECRET_DOMAIN}"
service: https://nginx-external-controller.network.svc.cluster.local:443 service: https://nginx-external-controller.network.svc.cluster.local:443
originRequest:
originServerName: "external.${SECRET_DOMAIN}"
- hostname: "*.${SECRET_DOMAIN}" - hostname: "*.${SECRET_DOMAIN}"
service: https://nginx-external-controller.network.svc.cluster.local:443 service: https://nginx-external-controller.network.svc.cluster.local:443
originRequest:
originServerName: "external.${SECRET_DOMAIN}"
- service: http_status:404 - service: http_status:404
@@ -38,6 +38,7 @@ spec:
NO_AUTOUPDATE: "true" NO_AUTOUPDATE: "true"
TUNNEL_CRED_FILE: /etc/cloudflared/creds/credentials.json TUNNEL_CRED_FILE: /etc/cloudflared/creds/credentials.json
TUNNEL_METRICS: 0.0.0.0:8080 TUNNEL_METRICS: 0.0.0.0:8080
TUNNEL_ORIGIN_ENABLE_HTTP2: true
TUNNEL_TRANSPORT_PROTOCOL: quic TUNNEL_TRANSPORT_PROTOCOL: quic
TUNNEL_POST_QUANTUM: true TUNNEL_POST_QUANTUM: true
TUNNEL_ID: TUNNEL_ID:
@@ -10,6 +10,7 @@ spec:
labels: labels:
app.kubernetes.io/name: *app app.kubernetes.io/name: *app
dependsOn: dependsOn:
- name: certificates
- name: external-dns - name: external-dns
path: ./kubernetes/apps/network/cloudflared/app path: ./kubernetes/apps/network/cloudflared/app
prune: true prune: true
@@ -25,7 +25,6 @@ spec:
values: values:
controllers: controllers:
main: main:
replicas: 2
strategy: RollingUpdate strategy: RollingUpdate
containers: containers:
main: main:
@@ -66,12 +65,27 @@ spec:
port: *port port: *port
ingress: ingress:
main: main:
enabled: false
external:
enabled: true enabled: true
className: external className: external
annotations: annotations:
external-dns.alpha.kubernetes.io/target: "external.${SECRET_DOMAIN}" external-dns.alpha.kubernetes.io/target: "external.${SECRET_DOMAIN}"
hosts: hosts:
- host: &host "{{ .Release.Name }}.${SECRET_DOMAIN}" - host: &host "{{ .Release.Name }}-external.${SECRET_DOMAIN}"
paths:
- path: /
service:
name: main
port: http
tls:
- hosts:
- *host
internal:
enabled: true
className: internal
hosts:
- host: &host "{{ .Release.Name }}-internal.${SECRET_DOMAIN}"
paths: paths:
- path: / - path: /
service: service:
@@ -3,8 +3,10 @@ apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization kind: Kustomization
resources: resources:
- ./namespace.yaml - ./namespace.yaml
- ./certificates/ks.yaml
- ./cloudflared/ks.yaml - ./cloudflared/ks.yaml
- ./echo-server/ks.yaml - ./echo-server/ks.yaml
- ./external-dns/ks.yaml - ./external-dns/ks.yaml
- ./k8s-gateway/ks.yaml - ./k8s-gateway/ks.yaml
- ./nginx/ks.yaml - ./nginx-external/ks.yaml
- ./nginx-internal/ks.yaml
@@ -0,0 +1,22 @@
---
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: &app nginx-external
namespace: flux-system
spec:
targetNamespace: network
commonMetadata:
labels:
app.kubernetes.io/name: *app
dependsOn:
- name: certificates
path: ./kubernetes/apps/network/nginx-external/app
prune: true
sourceRef:
kind: GitRepository
name: home-kubernetes
wait: false
interval: 30m
retryInterval: 1m
timeout: 5m
@@ -3,7 +3,7 @@ apiVersion: helm.toolkit.fluxcd.io/v2beta2
kind: HelmRelease kind: HelmRelease
metadata: metadata:
name: nginx-internal name: nginx-internal
namespace: &namespace network namespace: network
spec: spec:
interval: 30m interval: 30m
chart: chart:
@@ -29,7 +29,6 @@ spec:
replicaCount: 1 replicaCount: 1
service: service:
annotations: annotations:
external-dns.alpha.kubernetes.io/hostname: "internal.${SECRET_DOMAIN}"
io.cilium/lb-ipam-ips: "#{ bootstrap_internal_ingress_addr }#" io.cilium/lb-ipam-ips: "#{ bootstrap_internal_ingress_addr }#"
externalTrafficPolicy: Cluster externalTrafficPolicy: Cluster
ingressClassResource: ingressClassResource:
@@ -0,0 +1,22 @@
---
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: &app nginx-internal
namespace: flux-system
spec:
targetNamespace: network
commonMetadata:
labels:
app.kubernetes.io/name: *app
dependsOn:
- name: certificates
path: ./kubernetes/apps/network/nginx-internal/app
prune: true
sourceRef:
kind: GitRepository
name: home-kubernetes
wait: false
interval: 30m
retryInterval: 1m
timeout: 5m
@@ -1,66 +0,0 @@
---
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: &app nginx-certificates
namespace: flux-system
spec:
targetNamespace: network
commonMetadata:
labels:
app.kubernetes.io/name: *app
dependsOn:
- name: cert-manager-issuers
path: ./kubernetes/apps/network/nginx/certificates
prune: true
sourceRef:
kind: GitRepository
name: home-kubernetes
wait: true
interval: 30m
retryInterval: 1m
timeout: 5m
---
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: &app nginx-external
namespace: flux-system
spec:
targetNamespace: network
commonMetadata:
labels:
app.kubernetes.io/name: *app
dependsOn:
- name: nginx-certificates
path: ./kubernetes/apps/network/nginx/external
prune: true
sourceRef:
kind: GitRepository
name: home-kubernetes
wait: false
interval: 30m
retryInterval: 1m
timeout: 5m
---
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: &app nginx-internal
namespace: flux-system
spec:
targetNamespace: network
commonMetadata:
labels:
app.kubernetes.io/name: *app
dependsOn:
- name: nginx-certificates
path: ./kubernetes/apps/network/nginx/internal
prune: true
sourceRef:
kind: GitRepository
name: home-kubernetes
wait: false
interval: 30m
retryInterval: 1m
timeout: 5m