Compare commits

...

5 Commits

Author SHA1 Message Date
Morten Olsen
cad527e644 fix: add http service to authentik 2025-11-18 15:18:17 +01:00
Morten Olsen
ce2cebf77b fix: oidc auth url 2025-10-13 23:32:48 +02:00
Morten Olsen
3ae89e81bd fix: pgvector image name (#62) 2025-10-13 21:15:10 +00:00
Morten Olsen
bc67429cd2 move to pgvector (#61) 2025-10-13 23:00:54 +02:00
Morten Olsen
af2aae493e Fix/docker (#60) 2025-10-13 22:35:40 +02:00
9 changed files with 37 additions and 13 deletions

View File

@@ -1,12 +1,12 @@
apiVersion: rbac.authorization.k8s.io/v1 apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding kind: ClusterRoleBinding
metadata: metadata:
name: {{ include "homelab-operator.fullname" . }} name: '{{ include "homelab-operator.fullname" . }}'
subjects: subjects:
- kind: ServiceAccount - kind: ServiceAccount
name: {{ include "homelab-operator.serviceAccountName" . }} name: '{{ include "homelab-operator.serviceAccountName" . }}'
namespace: {{ .Release.Namespace }} namespace: "{{ .Release.Namespace }}"
roleRef: roleRef:
kind: ClusterRole kind: ClusterRole
name: {{ include "homelab-operator.fullname" . }} name: '{{ include "homelab-operator.fullname" . }}'
apiGroup: rbac.authorization.k8s.io apiGroup: rbac.authorization.k8s.io

View File

@@ -2,6 +2,7 @@ apiVersion: apps/v1
kind: Deployment kind: Deployment
metadata: metadata:
name: {{ include "homelab-operator.fullname" . }} name: {{ include "homelab-operator.fullname" . }}
namespace: "{{ .Release.Namespace }}"
labels: labels:
{{- include "homelab-operator.labels" . | nindent 4 }} {{- include "homelab-operator.labels" . | nindent 4 }}
spec: spec:

View File

@@ -3,6 +3,7 @@ apiVersion: v1
kind: ServiceAccount kind: ServiceAccount
metadata: metadata:
name: {{ include "homelab-operator.serviceAccountName" . }} name: {{ include "homelab-operator.serviceAccountName" . }}
namespace: "{{ .Release.Namespace }}"
labels: labels:
{{- include "homelab-operator.labels" . | nindent 4 }} {{- include "homelab-operator.labels" . | nindent 4 }}
{{- with .Values.serviceAccount.annotations }} {{- with .Values.serviceAccount.annotations }}

View File

@@ -1,6 +1,8 @@
FROM node:23-slim@sha256:86191b94d2a163be41f3dc7fe5e5fcaca8ba2f1be7275d98a06343483c17414a FROM node:23-slim@sha256:86191b94d2a163be41f3dc7fe5e5fcaca8ba2f1be7275d98a06343483c17414a
RUN corepack enable RUN corepack enable
WORKDIR /app
COPY package.json pnpm-lock.yaml ./ COPY package.json pnpm-lock.yaml ./
COPY patches ./patches
RUN pnpm install --frozen-lockfile --prod RUN pnpm install --frozen-lockfile --prod
COPY . . COPY . .
CMD ["node", "src/index.ts"] CMD ["node", "src/index.ts"]

View File

@@ -49,7 +49,7 @@
"sqlite3" "sqlite3"
], ],
"patchedDependencies": { "patchedDependencies": {
"@kubernetes/client-node": "patches/@kubernetes__client-node.patch" "@kubernetes/client-node": "./patches/@kubernetes__client-node.patch"
} }
}, },
"scripts": { "scripts": {

View File

@@ -18,6 +18,7 @@ import { RepoService } from '#bootstrap/repos/repos.ts';
import { DestinationRule } from '#resources/istio/destination-rule/destination-rule.ts'; import { DestinationRule } from '#resources/istio/destination-rule/destination-rule.ts';
import { NotReadyError } from '#utils/errors.ts'; import { NotReadyError } from '#utils/errors.ts';
import { ExternalHttpService } from '../external-http-service.ts/external-http-service.ts'; import { ExternalHttpService } from '../external-http-service.ts/external-http-service.ts';
import { HttpService } from '../http-service/http-service.ts';
const specSchema = z.object({ const specSchema = z.object({
environment: z.string(), environment: z.string(),
@@ -44,6 +45,7 @@ class AuthentikServer extends CustomResource<typeof specSchema> {
#initSecret: Secret<InitSecretData>; #initSecret: Secret<InitSecretData>;
#service: Service; #service: Service;
#helmRelease: HelmRelease; #helmRelease: HelmRelease;
#httpService: HttpService;
#externalHttpService: ExternalHttpService; #externalHttpService: ExternalHttpService;
#destinationRule: DestinationRule; #destinationRule: DestinationRule;
@@ -72,6 +74,8 @@ class AuthentikServer extends CustomResource<typeof specSchema> {
this.#destinationRule.on('changed', this.queueReconcile); this.#destinationRule.on('changed', this.queueReconcile);
this.#externalHttpService = resourceService.get(ExternalHttpService, this.name, this.namespace); this.#externalHttpService = resourceService.get(ExternalHttpService, this.name, this.namespace);
this.#httpService = resourceService.get(HttpService, this.name, this.namespace);
} }
public get service() { public get service() {
@@ -253,6 +257,22 @@ class AuthentikServer extends CustomResource<typeof specSchema> {
}, },
}); });
await this.#httpService.ensure({
metadata: {
ownerReferences: [this.ref],
},
spec: {
environment: this.spec.environment,
subdomain: this.spec.subdomain || 'authentik',
destination: {
host: this.#service.hostname,
port: {
number: 80,
},
},
},
});
await this.#externalHttpService.ensure({ await this.#externalHttpService.ensure({
metadata: { metadata: {
ownerReferences: [this.ref], ownerReferences: [this.ref],

View File

@@ -79,7 +79,7 @@ class OIDCClient extends CustomResource<typeof specSchema> {
clientId: this.name, clientId: this.name,
configuration: new URL(`/application/o/${this.appName}/.well-known/openid-configuration`, url).toString(), configuration: new URL(`/application/o/${this.appName}/.well-known/openid-configuration`, url).toString(),
configurationIssuer: new URL(`/application/o/${this.appName}/`, url).toString(), configurationIssuer: new URL(`/application/o/${this.appName}/`, url).toString(),
authorization: new URL(`/application/o/${this.appName}/authorize/`, url).toString(), authorization: new URL(`/application/o/authorize/`, url).toString(),
token: new URL(`/application/o/${this.appName}/token/`, url).toString(), token: new URL(`/application/o/${this.appName}/token/`, url).toString(),
userinfo: new URL(`/application/o/${this.appName}/userinfo/`, url).toString(), userinfo: new URL(`/application/o/${this.appName}/userinfo/`, url).toString(),
endSession: new URL(`/application/o/${this.appName}/end-session/`, url).toString(), endSession: new URL(`/application/o/${this.appName}/end-session/`, url).toString(),

View File

@@ -108,7 +108,7 @@ class PostgresCluster extends CustomResource<typeof specSchema> {
containers: [ containers: [
{ {
name: this.name, name: this.name,
image: 'postgres:17', image: 'pgvector/pgvector:pg17-trixie',
ports: [{ containerPort: 5432, name: 'postgres' }], ports: [{ containerPort: 5432, name: 'postgres' }],
env: [ env: [
{ name: 'POSTGRES_PASSWORD', valueFrom: { secretKeyRef: { name: secretName, key: 'password' } } }, { name: 'POSTGRES_PASSWORD', valueFrom: { secretKeyRef: { name: secretName, key: 'password' } } },

View File

@@ -4,10 +4,9 @@ metadata:
name: homelab-operator name: homelab-operator
build: build:
cluster: {}
artifacts: artifacts:
- image: homelaboperator - image: zot.olsen.cloud/homelaboperator
context: . context: ./images/operator
docker: docker:
dockerfile: Dockerfile dockerfile: Dockerfile
@@ -16,9 +15,10 @@ manifests:
releases: releases:
- name: homelab-operator - name: homelab-operator
chartPath: charts/operator chartPath: charts/operator
namespace: homelab
setValueTemplates: setValueTemplates:
image.repository: '{{.IMAGE_REPO_homelaboperator}}' image.repository: "zot.local/homelaboperator"
image.tag: '{{.IMAGE_TAG_homelaboperator}}' image.tag: "{{.IMAGE_TAG_zot_olsen_cloud_homelaboperator}}"
deploy: deploy:
# Use kubectl to apply the manifests. # Use kubectl to apply the manifests.