Compare commits

...

8 Commits

Author SHA1 Message Date
5b91db93b6 Merge pull request 'add ingress pvc, helmRepo and helmRelease for pulse' (#27) from add-pulse into main
All checks were successful
Validate Kubernetes Manifests / kubeconform (push) Successful in 11s
renovate / renovate (push) Successful in 5m11s
Reviewed-on: #27
2026-01-03 23:29:26 +00:00
23a187b688 Merge pull request 'use cf-ddns instead of cronjob' (#26) from add-cf-ddns into main
Some checks failed
Validate Kubernetes Manifests / kubeconform (push) Has been cancelled
Reviewed-on: #26
2026-01-03 23:29:18 +00:00
91f37ee77f add ingress pvc, helmRepo and helmRelease for pulse
All checks were successful
Validate Kubernetes Manifests / kubeconform (push) Successful in 2m16s
2026-01-04 04:55:48 +05:30
49d4494a03 use cf-ddns instead of cronjob
All checks were successful
Validate Kubernetes Manifests / kubeconform (push) Successful in 10s
2026-01-04 04:54:58 +05:30
Flux
62359ba094 Add Flux sync manifests
All checks were successful
Validate Kubernetes Manifests / kubeconform (push) Successful in 12s
2026-01-04 00:18:30 +05:30
21e8e7a4a5 add ingress-route and edit gitea-svc and traefik release to make gitea work on port 22
All checks were successful
Validate Kubernetes Manifests / kubeconform (push) Successful in 13s
2026-01-04 00:17:15 +05:30
58f43d038f Merge pull request 'Update alpine Docker tag to v3.23' (#23) from renovate/alpine-3.x into main
All checks were successful
Validate Kubernetes Manifests / kubeconform (push) Successful in 10s
Reviewed-on: #23
2026-01-03 02:09:44 +00:00
Renovate Bot
80f2311b5c Update alpine Docker tag to v3.23
All checks were successful
Validate Kubernetes Manifests / kubeconform (pull_request) Successful in 13s
2025-12-31 23:30:48 +00:00
14 changed files with 149 additions and 140 deletions

View File

@@ -1,41 +0,0 @@
apiVersion: batch/v1
kind: CronJob
metadata:
name: ipv6-dns-updater
namespace: external-dns
spec:
schedule: "*/60 * * * *"
successfulJobsHistoryLimit: 0
failedJobsHistoryLimit: 0
jobTemplate:
spec:
template:
spec:
restartPolicy: OnFailure
containers:
- name: updater
image: alpine:3.20
command:
- /bin/sh
- -c
- |
apk add --no-cache curl jq &&
sh /mnt/update-ipv6.sh
env:
- name: CF_API_KEY
valueFrom:
secretKeyRef:
name: cloudflare-global-key
key: CF_API_KEY
- name: CF_EMAIL
valueFrom:
secretKeyRef:
name: cloudflare-global-key
key: CF_EMAIL
volumeMounts:
- name: script
mountPath: /mnt
volumes:
- name: script
configMap:
name: ipv6-updater-script

View File

@@ -1,59 +0,0 @@
apiVersion: v1
kind: ConfigMap
metadata:
name: ipv6-updater-script
namespace: external-dns
data:
update-ipv6.sh: |
#!/bin/sh
ZONE_ID="fe797c7b55d4e23fcd7929173c72a021"
RECORD="*.akshun-lab.cc"
IPV6=$(curl -s https://api64.ipify.org)
if [ -z "$IPV6" ]; then
echo "No IPv6 detected"
exit 1
fi
# Get Record ID
RECORD_ID=$(curl -s \
-H "X-Auth-Email: $CF_EMAIL" \
-H "X-Auth-Key: $CF_API_KEY" \
"https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records?type=AAAA&name=$RECORD" \
| jq -r '.result[0].id')
if [ "$RECORD_ID" = "null" ]; then
echo "Record does not exist, creating..."
curl -s -X POST \
-H "X-Auth-Email: $CF_EMAIL" \
-H "X-Auth-Key: $CF_API_KEY" \
-H "Content-Type: application/json" \
"https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records" \
--data "{
\"type\": \"AAAA\",
\"name\": \"$RECORD\",
\"content\": \"$IPV6\",
\"ttl\": 120,
\"proxied\": false
}"
else
echo "Updating existing record..."
curl -s -X PUT \
-H "X-Auth-Email: $CF_EMAIL" \
-H "X-Auth-Key: $CF_API_KEY" \
-H "Content-Type: application/json" \
"https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records/$RECORD_ID" \
--data "{
\"type\": \"AAAA\",
\"name\": \"$RECORD\",
\"content\": \"$IPV6\",
\"ttl\": 120,
\"proxied\": false
}"
fi

View File

@@ -1,14 +0,0 @@
---
apiVersion: bitnami.com/v1alpha1
kind: SealedSecret
metadata:
name: cloudflare-api-token
namespace: external-dns
spec:
encryptedData:
CF_API_TOKEN: AgBGXS4yStjaLKfFq7svTArF6Y9wr/RvwQcV3P/aj/QzH8R3z9UimgGlrY61zTapCszTRRR4NJ55XpYQAU+9ugkfhDXfpmyi63oh7WWGENonHZFii9iAuC1xKMVP0B43I9Jm+YSFFCxpVE3iTiXFVbyhiSrbPfYX8KP3ED58D4T1s0OjCFWI6Uk63C5Qvc3zzjYRAvy/eHq4DEfNXifkFw7hJ03OouUmZMkvZXieNvPa3lvtnXHzE55eu3gs8C0xr/zGa3r2StfsVwLdLYaya+hHNtgp3cIiB+p8ncoBIEbyGzWQwT5jbl7zn7lqSfafe6KVYNxzKMGicVhCCOQfGyCUrrGkbBC3eXRPSgcPoHaJxLwjzPR1rVniKDsdVpRun2wskGXScRvzBEmt6gucLTUQTapc2R3R7MO8rxX0+dOR4uj7/hJdOJqNb6b7G74Jf9Y8nFfY1QEIys2i04d2HHKRIomQfAcnU2IsbWO2lEw4wzToPOGI4kQQqpLR7dIFOQnRrWJRj/5x3titG/th3vIyTRVHigGSwH9DUEh3TgVBSQbWuJMbh9HRZ/3z06kfgiGAnydzltLUOGw3w3JRE09+vS7kGKDr78jcokVoPcm8riRc1eJQImZsodMA1SF8PH1u+y0kUEbJpRuRG0e3m1yC014laokpa3Lrl8BAJkqOyAjufAOmSFPvXNROxw3WB1tED8RjZSADSocZPVoKfPNxInGxFntojEoYQw+P32d4sBdj9tJqHuCy
template:
metadata:
name: cloudflare-api-token
namespace: external-dns
type: Opaque

View File

@@ -1,8 +0,0 @@
---
kind: Namespace
apiVersion: v1
metadata:
name: external-dns
labels:
name: external-dns

View File

@@ -11,7 +11,7 @@ spec:
branch: main branch: main
secretRef: secretRef:
name: flux-system name: flux-system
url: ssh://git@192.168.1.202/aggarwalakshun/ipv6-k3s url: ssh://git@gitea.akshun-lab.cc/aggarwalakshun/ipv6-k3s
--- ---
apiVersion: kustomize.toolkit.fluxcd.io/v1 apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization kind: Kustomization

View File

@@ -0,0 +1,14 @@
---
apiVersion: traefik.io/v1alpha1
kind: IngressRouteTCP
metadata:
name: gitea-ssh
namespace: git-ops
spec:
entryPoints:
- ssh
routes:
- match: HostSNI(`*`)
services:
- name: gitea-int-service
port: 22

View File

@@ -1,20 +1,3 @@
---
apiVersion: v1
kind: Service
metadata:
name: gitea-app
namespace: git-ops
annotations:
metallb.io/loadBalancerIPs: 192.168.1.202
spec:
type: LoadBalancer
selector:
app: gitea-app
ports:
- port: 22
targetPort: 22
name: ssh
--- ---
apiVersion: v1 apiVersion: v1
kind: Service kind: Service
@@ -28,6 +11,11 @@ spec:
- protocol: TCP - protocol: TCP
port: 3000 port: 3000
targetPort: 3000 targetPort: 3000
name: http
- protocol: TCP
port: 22
targetPort: 22
name: ssh
--- ---
apiVersion: v1 apiVersion: v1

View File

@@ -57,6 +57,13 @@ spec:
expose: expose:
default: true default: true
ssh:
port: 22
exposedPort: 22
protocol: TCP
expose:
default: true
providers: providers:
kubernetesCRD: {} kubernetesCRD: {}
kubernetesIngress: {} kubernetesIngress: {}

View File

@@ -0,0 +1,26 @@
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: pulse-ingress
namespace: monitoring
annotations:
cert-manager.io/cluster-issuer: letsencrypt-cloudflare
traefik.ingress.kubernetes.io/router.entrypoints: websecure
spec:
ingressClassName: traefik
tls:
- hosts:
- pulse.akshun-lab.cc
secretName: pulse-tls
rules:
- host: pulse.akshun-lab.cc
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: pulse
port:
number: 7655

View File

@@ -0,0 +1,14 @@
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pulse-longhorn
namespace: monitoring
spec:
resources:
requests:
storage: 1Gi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
storageClassName: longhorn

View File

@@ -0,0 +1,23 @@
---
apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
name: pulse
namespace: monitoring
spec:
interval: 6h
chart:
spec:
chart: pulse
sourceRef:
kind: HelmRepository
name: pulse
namespace: flux-system
interval: 6h
values:
persistence:
enabled: true
existingClaim: pulse-longhorn
image:
repository: rcourtman/pulse
tag: 5.0.10

View File

@@ -0,0 +1,10 @@
---
apiVersion: source.toolkit.fluxcd.io/v1
kind: HelmRepository
metadata:
name: pulse
namespace: flux-system
spec:
type: "oci"
interval: 6h
url: oci://ghcr.io/rcourtman/pulse-chart

View File

@@ -0,0 +1,14 @@
---
apiVersion: bitnami.com/v1alpha1
kind: SealedSecret
metadata:
name: cf-ddns-secret
namespace: tools
spec:
encryptedData:
api-token: AgB0eovgOD1djWw86G6ETlDEtrs0Yf31v/9voMyLkBM76rlPQ1RaLSZ8ozyH1nriLgAtiF1/g5/dtshGE+YZ0o4RjMCLPEhJXGFftEYXCTqTfH6PoODf4FV3sSSB1qx0VIUYjk61xxM0SD1R0cjNUlfTQxpmVcI2Zw8bjuuYZXy3kNt/4znsWtYUdRWgLFb5cAsdsesL+deWTnvLv67M3DyQ3l1qoqndVHFh3Sshxd8eI46kEiPVYwK+s1lGxi/y+Qbmw9g8Ki5LNvryVe6SHDTEziNHtnKsbPeDQ4bHRCs2/KQqhZIR39+1KV8dJ6DcXgz3GUermcQdm2o5nnfb2e0hsrQflW/IKxValsO9Ds+I1LARIQqdEYMHvsoExd+YVyL86hO3OWqSu53WbWToqbzx2O2NZ0iVFhOIqGHzTOZS0CQY8n9w3lpB86VF7nGZHW8AjJ8Z8FpU11Yx5So0UJG25n0f7gszm6v9HVvb5MUBZyXosoJGgB6AGG4lFgDWze+JIvnsgWrfjUwzsGVXeXOoi16+qZwdXcU7NfRPy0c4UV6C+UQH1oAgHN6Qy/PoaOcs0qnHuP0Cnzr8TgeYzsStpntA+3sPLpRjYCzAiowc5HzKbHDArMDrKgdy6cQSYL58P57ZsYV/AmQC9S0n+vYAZbJlOeI7laxCoPYAxcWS8WCYPoBDVmELPeeI7ch4BaoTYpWpOrGVeaJkRtMTVuQ7Fgc5yFzVOH6KOTTLDXuM/3xYHhG1ZRXj
template:
metadata:
name: cf-ddns-secret
namespace: tools
type: Opaque

View File

@@ -0,0 +1,35 @@
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: cf-ddns
namespace: tools
spec:
selector:
matchLabels:
app: cf-ddns
template:
metadata:
labels:
app: cf-ddns
spec:
hostNetwork: true
containers:
- name: cf-ddns
image: favonia/cloudflare-ddns:1.15.1
securityContext:
capabilities:
drop:
- ALL
env:
- name: DOMAINS
value: "*.akshun-lab.cc"
- name: PROXIED
value: "false"
- name: IP4_PROVIDER
value: "none"
- name: CLOUDFLARE_API_TOKEN
valueFrom:
secretKeyRef:
name: cf-ddns-secret
key: api-token