Ingress: Improve port opening
Update nginx replica counts and rollout strategy.
What proxy-backend configmap changes and reload auto proxy nginx.
Make ingress optional.
Use <PREFIX>.<CLUSTER_NAME>.clusters.p.<DOMAIN> addresses for remote
cluster services.
Change-Id: Ideb146a8c0275822ee5cd28311c00a817f4202aa
diff --git a/apps/reload/Dockerfile b/apps/reload/Dockerfile
new file mode 100644
index 0000000..1f2e54c
--- /dev/null
+++ b/apps/reload/Dockerfile
@@ -0,0 +1,7 @@
+# FROM gcr.io/distroless/static:nonroot
+# TODO(gio): remove busybox
+FROM busybox:latest
+
+ARG TARGETARCH
+
+COPY reload_${TARGETARCH} /usr/bin/reload
diff --git a/apps/reload/Makefile b/apps/reload/Makefile
new file mode 100644
index 0000000..aeba9ff
--- /dev/null
+++ b/apps/reload/Makefile
@@ -0,0 +1,35 @@
+repo_name ?= giolekva
+podman ?= docker
+docker_flags=--provenance=false --sbom=false
+ifeq ($(podman), podman)
+manifest_dest=docker://docker.io/$(repo_name)/reload:latest
+endif
+
+clean:
+ rm -f reload
+
+build_arm64: export CGO_ENABLED=0
+build_arm64: export GO111MODULE=on
+build_arm64: export GOOS=linux
+build_arm64: export GOARCH=arm64
+build_arm64:
+ go build -o reload_arm64 *.go
+
+build_amd64: export CGO_ENABLED=0
+build_amd64: export GO111MODULE=on
+build_amd64: export GOOS=linux
+build_amd64: export GOARCH=amd64
+build_amd64:
+ go build -o reload_amd64 *.go
+
+push_arm64: clean build_arm64
+ $(podman) build --platform linux/arm64 --tag=$(repo_name)/reload:arm64 $(docker_flags) .
+ $(podman) push $(repo_name)/reload:arm64
+
+push_amd64: clean build_amd64
+ $(podman) build --platform linux/amd64 --tag=$(repo_name)/reload:amd64 $(docker_flags) .
+ $(podman) push $(repo_name)/reload:amd64
+
+push: push_arm64 push_amd64
+ $(podman) manifest create $(repo_name)/reload:latest $(repo_name)/reload:arm64 $(repo_name)/reload:amd64
+ $(podman) manifest push --purge $(repo_name)/reload:latest $(manifest_dest)
diff --git a/apps/reload/go.mod b/apps/reload/go.mod
new file mode 100644
index 0000000..a45c664
--- /dev/null
+++ b/apps/reload/go.mod
@@ -0,0 +1,3 @@
+module github.com/giolekva/pcloud/apps/reload
+
+go 1.23.1
diff --git a/apps/reload/main.go b/apps/reload/main.go
new file mode 100644
index 0000000..a06d16f
--- /dev/null
+++ b/apps/reload/main.go
@@ -0,0 +1,68 @@
+package main
+
+import (
+ "crypto/sha256"
+ "flag"
+ "fmt"
+ "io"
+ "os"
+ "syscall"
+ "time"
+)
+
+var watch = flag.String("watch", "", "Path to watch")
+var reload = flag.String("reload", "", "Path to PID file")
+
+func check(err error) {
+ if err != nil {
+ panic(err)
+ }
+}
+
+func main() {
+ flag.Parse()
+ var prev string
+ for {
+ cur := func() string {
+ inp, err := os.Open(*watch)
+ check(err)
+ defer inp.Close()
+ h := sha256.New()
+ _, err = io.Copy(h, inp)
+ check(err)
+ return string(h.Sum(nil))
+ }()
+ if prev == "" {
+ prev = cur
+ continue
+ }
+ if prev != cur {
+ prev = cur
+ fmt.Println("changed")
+ pid := func() int {
+ inp, err := os.Open(*reload)
+ // TODO(gio): check error type
+ if err != nil {
+ return -1
+ }
+ defer inp.Close()
+ var ret int
+ _, err = fmt.Fscanf(inp, "%d", &ret)
+ check(err)
+ return ret
+ }()
+ if pid != -1 {
+ p, err := os.FindProcess(pid)
+ check(err)
+ fmt.Println("found process")
+ fmt.Println("%+v\n", p)
+ // TODO(gio): take signal value from flags
+ check(p.Signal(syscall.SIGKILL))
+ fmt.Println("sent signall")
+ }
+ } else {
+ fmt.Println("no change")
+ }
+ time.Sleep(5 * time.Second)
+ }
+}