diff --git a/.gitignore b/.gitignore index 2a241f3..a9e86e1 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,7 @@ .helm-data/ .DS_Store .kube/ + +*secret*.yaml +*example*.yaml +!*sealed?secret.yaml \ No newline at end of file diff --git a/manifest/overlays/production/ingressroute.yaml b/manifest/overlays/production/ingressroute.yaml new file mode 100644 index 0000000..5c85a44 --- /dev/null +++ b/manifest/overlays/production/ingressroute.yaml @@ -0,0 +1,46 @@ +apiVersion: traefik.io/v1alpha1 +kind: IngressRoute +metadata: + name: mcp-services + namespace: mcp-services + labels: + app.kubernetes.io/name: mcp-services +spec: + entryPoints: + - websecure + routes: + # MCP is a programmatic protocol — interactive OIDC login would break the + # clients, so access is gated at the network layer with the shared lan-only + # ipAllowList middleware (192.168/16, 10/8, 172.16/12). For per-user token + # auth, set spec.oidcConfigRef on each MCPServer instead. + - kind: Rule + match: Host(`gitea-mcp.olb42.com`) + middlewares: + - name: lan-only + namespace: infra + services: + - name: mcp-gitea-mcp-proxy + namespace: toolhive-system + port: 8080 + - kind: Rule + match: Host(`argocd-mcp.olb42.com`) + middlewares: + - name: lan-only + namespace: infra + services: + - name: mcp-argocd-mcp-proxy + namespace: toolhive-system + port: 8080 + - kind: Rule + match: Host(`kubernetes-mcp.olb42.com`) + middlewares: + - name: lan-only + namespace: infra + services: + - name: mcp-kubernetes-mcp-proxy + namespace: toolhive-system + port: 8080 + # No default TLSStore in this cluster, so reference the wildcard cert + # explicitly. olb42-wildcard-tls is auto-reflected into every namespace. + tls: + secretName: olb42-wildcard-tls diff --git a/manifest/overlays/production/kustomization.yaml b/manifest/overlays/production/kustomization.yaml index fe09d58..00a4947 100644 --- a/manifest/overlays/production/kustomization.yaml +++ b/manifest/overlays/production/kustomization.yaml @@ -1,12 +1,15 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization -# namespace: kube-system - +namespace: toolhive-system resources: + - mcp-kube-rbac.yaml - mcpserver-gitea.yaml - mcpserver-argocd.yaml - mcpserver-kubernetes.yaml - mcp-group-homelab-core.yaml - - mcp-kube-rbac.yaml + - ingressroute.yaml + - secrets/gitea-mcp-secret.sealed.secret.yaml + - secrets/argocd-mcp-secret.sealed.secret.yaml + diff --git a/manifest/overlays/production/secrets/argocd-mcp-secret.sealed.secret.yaml b/manifest/overlays/production/secrets/argocd-mcp-secret.sealed.secret.yaml new file mode 100644 index 0000000..cb1fdf9 --- /dev/null +++ b/manifest/overlays/production/secrets/argocd-mcp-secret.sealed.secret.yaml @@ -0,0 +1,21 @@ +--- +apiVersion: bitnami.com/v1alpha1 +kind: SealedSecret +metadata: + annotations: + sealedsecrets.bitnami.com/cluster-wide: "true" + name: argocd-mcp-secret + namespace: mcp-services +spec: + encryptedData: + token: AgAJEvZxMyF5Thih458HCAnZK3kopim0EgqkdYp4HExCaPXlJkjTCXLaLtnRRzPOhiVNPNMcasKxvMFcyG7gFW8Bt4mzd4YRgDZ3YUVAOh82qFlo+FuHs9DgG/ZtwX7k8W+ef1vCaWNzPyCn+GLz0vh1bYB4EK2yucdPTyRuHjkWN+14ZfBDsx/K1jml656MH2mSzgp+phjE9PqnlSKwMGfzJpVIg4meOZUvyIQ/pix1M45nFbj3uYAaHctB00+xRQJVpq5Nom2+vCCy/nEI18lmvuSc9RYw53pP50sHe6nRP/sXWWHog6ECAykBQxFtWlWGoFqQ3v/Gc5qgOiqrgbRwIGagJVKpBX1Hcs5tX2luTidaT/cdmu+1te1wRvPCgq6vlMw875cPSybpLz3T/OpMbqqO0oNtxsmjoZe1ebtD7caCFRjyPAxj//vRha6Nw/yGxRhOGNqtxhEcj7OnyezO9qYKNeM2r4EKwsBiLkZbRcMbNmZl7T41lWohT2lV54uzpKU6k81XPERif+PYhC/SbQ6jg40fovL94F2tlI8RDdHzSMRAFJB5lwjNGwmonwMC9TUzW5jA3iIj/CavWvOSNX1flD0vqbau9+wdRh8pRuXDagwlKCZMOFamch0RrBPUJI2qy6ZP99o9TN+SxBnrdhhZdDcM84Gazj2uwDPirrWQ9sKjrLRxJMryUF0pr8PTcT0dsUc52oXWJS/FAaBS0CKRtiVhL273hLK5/bTI31sYDgICd/0sHsro/GSY02f+a3OiGiCWHYdwoluHka77reH9Fl1RDgQUzK3dnhFFJkeqWznv4dmRYinJhgv8GkjjYVR6zWfHP66MEIhhA9j5iIfLgnQGz+gfLN9PlCg9W1akipZ/dwMQa8jTEW8+7bKAodJjCIeZ/215ARHmuHhVDOFdQdkihtsfxnzJTLVJwyzXAvKhthFVLVYRkNu1zRCGvThYhG1W3lw3Qp9nvBPiGD7/dYQMCyUltVconKopTRJuhp+bhSEcI43R8g4dUjUP + template: + metadata: + annotations: + reflector.v1.k8s.emberstack.com/reflection-allowed: "true" + reflector.v1.k8s.emberstack.com/reflection-auto-enabled: "true" + reflector.v1.k8s.emberstack.com/reflection-auto-namespaces: mcp-services, + toolhive-system + sealedsecrets.bitnami.com/cluster-wide: "true" + name: argocd-mcp-secret + namespace: mcp-services diff --git a/manifest/overlays/production/secrets/gitea-mcp-secret.sealed.secret.yaml b/manifest/overlays/production/secrets/gitea-mcp-secret.sealed.secret.yaml new file mode 100644 index 0000000..2fa0ad9 --- /dev/null +++ b/manifest/overlays/production/secrets/gitea-mcp-secret.sealed.secret.yaml @@ -0,0 +1,21 @@ +--- +apiVersion: bitnami.com/v1alpha1 +kind: SealedSecret +metadata: + annotations: + sealedsecrets.bitnami.com/cluster-wide: "true" + name: gitea-mcp-secret + namespace: mcp-services +spec: + encryptedData: + token: AgCJsZ0XkbDWOQ7wxJwV4XJddu4Si+bbiH83iGQ2Jyju5Yp3XsXwE+BHy+cJt8JplAaqOUlz1BeOyudoSvChFV+MtlhfXPP18jHs5BG8BGE0Mz2uaMmQH8nLsHjJ77x/w/+rNtH6ECg9KFOBIG0DAX36EraSiqFgPF67lD4/3P5q1OZr1n1ytn4oUFLJCezJXLhEm05NfI5IfJx+UULyxdhJDPrJNYsan8Vdjk6m+iEv37ryFqXMpSlL2BFUQ+4Ss92jDBK6C127GXfW4LOL1Xq0g2K6KMH3nScKQzsjoM2EfUfCXaOmqjAeyWlK2Bjsz/KvDfnoSZSAoZJOJsAsgV51/XKCP2V7NlaraxwyMjUJNEoBYPkMVJvd2QMXZgEjf+vBNLjS1euMCwZPqG0Fg015Yx0kXEOOtRewOafP+5bK7mXwMsGIsXMlNGWMkQigOWSXXPAjO2TRK7gSTEyN+QaJDDisdSV8+8xlTZ92ldIchin24ztsp14kP+vVy4jv2SLa0i7O3XV23UHB7QnCVhaPbo0hVhB1bVRz0QPuFkmuvLRyb6cm85NxeYxGkExtbQk020V2Y9upz4bV6sB6y8IIL5TR3jFr3zhYeO7Su5rA/r3Jt8XO17Ljx/DngpynVyJvZbpwstDL6se22es15HfUTixL90WDLWM1/xMt3dbuVkIPgj7Wes9fLNLvn+khal0XkqS2bUa9Izl3GqFlNeBa5Z0i4RY8m3m1xn+9j3dZlwlW0CXrBW7z + template: + metadata: + annotations: + reflector.v1.k8s.emberstack.com/reflection-allowed: "true" + reflector.v1.k8s.emberstack.com/reflection-auto-enabled: "true" + reflector.v1.k8s.emberstack.com/reflection-auto-namespaces: mcp-services, + toolhive-system + sealedsecrets.bitnami.com/cluster-wide: "true" + name: gitea-mcp-secret + namespace: mcp-services