Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 43f5d5ef60 |
+2
-4
@@ -102,7 +102,6 @@ dig aqi.leeworks.dev +short
|
||||
dig docs.leeworks.dev +short
|
||||
dig status.leeworks.dev +short
|
||||
dig registry.leeworks.dev +short
|
||||
dig grafana.leeworks.dev +short
|
||||
|
||||
# Check TLS certificates (once services are deployed)
|
||||
curl -v https://zip.leeworks.dev/health 2>&1 | grep -E "SSL|certificate|issuer"
|
||||
@@ -126,7 +125,7 @@ The following actions require human operator access to the DNS provider:
|
||||
|
||||
1. Log into the DNS provider managing `leeworks.dev`
|
||||
2. Find the cluster ingress IP: `kubectl get svc -n ingress-nginx ingress-nginx-controller`
|
||||
3. Create/update the 7 A records listed in the table above
|
||||
3. Create/update the 6 A records listed in the table above
|
||||
4. Verify propagation: `dig +trace zip.leeworks.dev`
|
||||
|
||||
DNS propagation typically takes 5–60 minutes.
|
||||
@@ -142,5 +141,4 @@ DNS propagation typically takes 5–60 minutes.
|
||||
- [ ] `docs.leeworks.dev` → DNS record created
|
||||
- [ ] `status.leeworks.dev` → DNS record created
|
||||
- [ ] `registry.leeworks.dev` → DNS record created
|
||||
- [ ] `grafana.leeworks.dev` → DNS record created
|
||||
- [ ] TLS certificates issued and valid for all 7 subdomains
|
||||
- [ ] TLS certificates issued and valid for all 6 subdomains
|
||||
|
||||
@@ -188,7 +188,7 @@ kubectl create secret generic gitea-image-automation-token \
|
||||
|
||||
## Phase 4 — DNS for API services (issue #33)
|
||||
|
||||
Add DNS A records for all seven leeworks.dev subdomains (all point to the same
|
||||
Add DNS A records for all six leeworks.dev subdomains (all point to the same
|
||||
cluster ingress IP):
|
||||
|
||||
| Hostname | Target |
|
||||
@@ -199,16 +199,6 @@ cluster ingress IP):
|
||||
| `docs.leeworks.dev` | `<cluster ingress IP>` |
|
||||
| `grafana.leeworks.dev` | `<cluster ingress IP>` |
|
||||
| `status.leeworks.dev` | `<cluster ingress IP>` |
|
||||
| `registry.leeworks.dev` | `<cluster ingress IP>` |
|
||||
|
||||
Verify DNS propagation:
|
||||
|
||||
```bash
|
||||
for host in zip holidays aqi docs grafana status registry; do
|
||||
echo -n "${host}.leeworks.dev: "
|
||||
dig ${host}.leeworks.dev +short
|
||||
done
|
||||
```
|
||||
|
||||
cert-manager will obtain Let's Encrypt certificates automatically once DNS
|
||||
propagates (typically minutes, up to 48 h).
|
||||
|
||||
@@ -1,29 +1,18 @@
|
||||
# Placeholder: inject the RapidAPI Proxy Secret here once ESO is deployed.
|
||||
# Replace with a real ExternalSecret once leeworks-agents/api-company#2 and
|
||||
# the external-secrets operator are running in the cluster.
|
||||
#
|
||||
# Example (uncomment and fill in secretStore name):
|
||||
#
|
||||
# apiVersion: external-secrets.io/v1beta1
|
||||
# kind: ExternalSecret
|
||||
# metadata:
|
||||
# name: rapidapi-proxy-secret
|
||||
# namespace: air-quality
|
||||
# spec:
|
||||
# refreshInterval: 1h
|
||||
# secretStoreRef:
|
||||
# name: <your-secret-store>
|
||||
# kind: ClusterSecretStore
|
||||
# target:
|
||||
# name: rapidapi-proxy-secret
|
||||
# creationPolicy: Owner
|
||||
# data:
|
||||
# - secretKey: X-RapidAPI-Proxy-Secret
|
||||
# remoteRef:
|
||||
# key: rapidapi/air-quality
|
||||
# property: proxy-secret
|
||||
#
|
||||
# Until then, create manually:
|
||||
# kubectl create secret generic rapidapi-proxy-secret \
|
||||
# --from-literal=X-RapidAPI-Proxy-Secret=<value> \
|
||||
# -n air-quality
|
||||
apiVersion: external-secrets.io/v1beta1
|
||||
kind: ExternalSecret
|
||||
metadata:
|
||||
name: rapidapi-proxy-secret
|
||||
namespace: air-quality
|
||||
spec:
|
||||
refreshInterval: 1h
|
||||
secretStoreRef:
|
||||
name: kubernetes-provider
|
||||
kind: ClusterSecretStore
|
||||
target:
|
||||
name: rapidapi-proxy-secret
|
||||
creationPolicy: Owner
|
||||
data:
|
||||
- secretKey: X-RapidAPI-Proxy-Secret
|
||||
remoteRef:
|
||||
key: rapidapi-air-quality-source
|
||||
property: X-RapidAPI-Proxy-Secret
|
||||
|
||||
@@ -0,0 +1,50 @@
|
||||
# ClusterSecretStore using the Kubernetes provider.
|
||||
# Reads secrets from the cluster itself — no external vault required.
|
||||
# The service account below must have get/list access to secrets in
|
||||
# the namespaces where ExternalSecrets are created.
|
||||
apiVersion: v1
|
||||
kind: ServiceAccount
|
||||
metadata:
|
||||
name: eso-kubernetes-provider
|
||||
namespace: external-secrets
|
||||
---
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
kind: ClusterRole
|
||||
metadata:
|
||||
name: eso-kubernetes-provider-reader
|
||||
rules:
|
||||
- apiGroups: [""]
|
||||
resources: ["secrets"]
|
||||
verbs: ["get", "list", "watch"]
|
||||
---
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
kind: ClusterRoleBinding
|
||||
metadata:
|
||||
name: eso-kubernetes-provider-reader
|
||||
roleRef:
|
||||
apiGroup: rbac.authorization.k8s.io
|
||||
kind: ClusterRole
|
||||
name: eso-kubernetes-provider-reader
|
||||
subjects:
|
||||
- kind: ServiceAccount
|
||||
name: eso-kubernetes-provider
|
||||
namespace: external-secrets
|
||||
---
|
||||
apiVersion: external-secrets.io/v1beta1
|
||||
kind: ClusterSecretStore
|
||||
metadata:
|
||||
name: kubernetes-provider
|
||||
spec:
|
||||
provider:
|
||||
kubernetes:
|
||||
remoteNamespace: external-secrets
|
||||
server:
|
||||
caProvider:
|
||||
type: ConfigMap
|
||||
name: kube-root-ca.crt
|
||||
namespace: external-secrets
|
||||
key: ca.crt
|
||||
auth:
|
||||
serviceAccount:
|
||||
name: eso-kubernetes-provider
|
||||
namespace: external-secrets
|
||||
@@ -0,0 +1,30 @@
|
||||
apiVersion: helm.toolkit.fluxcd.io/v2
|
||||
kind: HelmRelease
|
||||
metadata:
|
||||
name: external-secrets
|
||||
namespace: external-secrets
|
||||
spec:
|
||||
interval: 15m
|
||||
chart:
|
||||
spec:
|
||||
chart: external-secrets
|
||||
version: ">=0.9.0 <1.0.0"
|
||||
sourceRef:
|
||||
kind: HelmRepository
|
||||
name: external-secrets
|
||||
namespace: flux-system
|
||||
interval: 60m
|
||||
install:
|
||||
crds: CreateReplace
|
||||
remediation:
|
||||
retries: 3
|
||||
upgrade:
|
||||
crds: CreateReplace
|
||||
remediation:
|
||||
retries: 3
|
||||
values:
|
||||
installCRDs: true
|
||||
webhook:
|
||||
port: 9443
|
||||
certController:
|
||||
requeueInterval: 5m
|
||||
@@ -0,0 +1,8 @@
|
||||
apiVersion: source.toolkit.fluxcd.io/v1
|
||||
kind: HelmRepository
|
||||
metadata:
|
||||
name: external-secrets
|
||||
namespace: flux-system
|
||||
spec:
|
||||
interval: 60m
|
||||
url: https://charts.external-secrets.io
|
||||
@@ -0,0 +1,7 @@
|
||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||
kind: Kustomization
|
||||
resources:
|
||||
- namespace.yaml
|
||||
- helmrepository.yaml
|
||||
- helmrelease.yaml
|
||||
- clustersecretstore.yaml
|
||||
@@ -0,0 +1,4 @@
|
||||
apiVersion: v1
|
||||
kind: Namespace
|
||||
metadata:
|
||||
name: external-secrets
|
||||
@@ -1,29 +1,18 @@
|
||||
# Placeholder: inject the RapidAPI Proxy Secret here once ESO is deployed.
|
||||
# Replace with a real ExternalSecret once leeworks-agents/api-company#2 and
|
||||
# the external-secrets operator are running in the cluster.
|
||||
#
|
||||
# Example (uncomment and fill in secretStore name):
|
||||
#
|
||||
# apiVersion: external-secrets.io/v1beta1
|
||||
# kind: ExternalSecret
|
||||
# metadata:
|
||||
# name: rapidapi-proxy-secret
|
||||
# namespace: holidays
|
||||
# spec:
|
||||
# refreshInterval: 1h
|
||||
# secretStoreRef:
|
||||
# name: <your-secret-store>
|
||||
# kind: ClusterSecretStore
|
||||
# target:
|
||||
# name: rapidapi-proxy-secret
|
||||
# creationPolicy: Owner
|
||||
# data:
|
||||
# - secretKey: X-RapidAPI-Proxy-Secret
|
||||
# remoteRef:
|
||||
# key: rapidapi/holidays
|
||||
# property: proxy-secret
|
||||
#
|
||||
# Until then, create manually:
|
||||
# kubectl create secret generic rapidapi-proxy-secret \
|
||||
# --from-literal=X-RapidAPI-Proxy-Secret=<value> \
|
||||
# -n holidays
|
||||
apiVersion: external-secrets.io/v1beta1
|
||||
kind: ExternalSecret
|
||||
metadata:
|
||||
name: rapidapi-proxy-secret
|
||||
namespace: holidays
|
||||
spec:
|
||||
refreshInterval: 1h
|
||||
secretStoreRef:
|
||||
name: kubernetes-provider
|
||||
kind: ClusterSecretStore
|
||||
target:
|
||||
name: rapidapi-proxy-secret
|
||||
creationPolicy: Owner
|
||||
data:
|
||||
- secretKey: X-RapidAPI-Proxy-Secret
|
||||
remoteRef:
|
||||
key: rapidapi-holidays-source
|
||||
property: X-RapidAPI-Proxy-Secret
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||
kind: Kustomization
|
||||
resources:
|
||||
- external-secrets
|
||||
- gitea-runner
|
||||
- monitoring
|
||||
- docs-site
|
||||
|
||||
@@ -1,29 +1,18 @@
|
||||
# Placeholder: inject the RapidAPI Proxy Secret here once ESO is deployed.
|
||||
# Replace with a real ExternalSecret once leeworks-agents/api-company#2 and
|
||||
# the external-secrets operator are running in the cluster.
|
||||
#
|
||||
# Example (uncomment and fill in secretStore name):
|
||||
#
|
||||
# apiVersion: external-secrets.io/v1beta1
|
||||
# kind: ExternalSecret
|
||||
# metadata:
|
||||
# name: rapidapi-proxy-secret
|
||||
# namespace: zip-enrichment
|
||||
# spec:
|
||||
# refreshInterval: 1h
|
||||
# secretStoreRef:
|
||||
# name: <your-secret-store>
|
||||
# kind: ClusterSecretStore
|
||||
# target:
|
||||
# name: rapidapi-proxy-secret
|
||||
# creationPolicy: Owner
|
||||
# data:
|
||||
# - secretKey: X-RapidAPI-Proxy-Secret
|
||||
# remoteRef:
|
||||
# key: rapidapi/zip-enrichment
|
||||
# property: proxy-secret
|
||||
#
|
||||
# Until then, create manually:
|
||||
# kubectl create secret generic rapidapi-proxy-secret \
|
||||
# --from-literal=X-RapidAPI-Proxy-Secret=<value> \
|
||||
# -n zip-enrichment
|
||||
apiVersion: external-secrets.io/v1beta1
|
||||
kind: ExternalSecret
|
||||
metadata:
|
||||
name: rapidapi-proxy-secret
|
||||
namespace: zip-enrichment
|
||||
spec:
|
||||
refreshInterval: 1h
|
||||
secretStoreRef:
|
||||
name: kubernetes-provider
|
||||
kind: ClusterSecretStore
|
||||
target:
|
||||
name: rapidapi-proxy-secret
|
||||
creationPolicy: Owner
|
||||
data:
|
||||
- secretKey: X-RapidAPI-Proxy-Secret
|
||||
remoteRef:
|
||||
key: rapidapi-zip-enrichment-source
|
||||
property: X-RapidAPI-Proxy-Secret
|
||||
|
||||
Reference in New Issue
Block a user