--- apiVersion: cilium.io/v2 kind: CiliumNetworkPolicy metadata: name: forgejo namespace: forgejo spec: endpointSelector: matchLabels: app.kubernetes.io/name: forgejo app.kubernetes.io/instance: forgejo ingress: # Kubelet probes, local port-forwarding, and same-node LoadBalancer backend flows. - fromEntities: - host toPorts: - ports: - port: "3000" protocol: TCP - port: "2222" protocol: TCP # Gateway I Envoy proxy: outbound connections use reserved:ingress identity. - fromEntities: - ingress toPorts: - ports: - port: "3000" protocol: TCP - fromEndpoints: - matchLabels: k8s:io.kubernetes.pod.namespace: kube-system gateway.networking.k8s.io/gateway-name: gateway-internal toPorts: - ports: - port: "3000" protocol: TCP # Flux source-controller clones the GitOps repository over in-cluster SSH. - fromEndpoints: - matchLabels: k8s:io.kubernetes.pod.namespace: flux-system app: source-controller toPorts: - ports: - port: "2222" protocol: TCP # Internal SSH clients hit the dedicated forgejo-ssh LoadBalancer service. - fromCIDR: - 10.115.187.218/24 - 10.63.81.107/24 - 10.162.8.60/24 toPorts: - ports: - port: "2222" protocol: TCP egress: - toEndpoints: - matchLabels: k8s:io.kubernetes.pod.namespace: postgres cnpg.io/cluster: main toPorts: - ports: - port: "5432" protocol: TCP - toEndpoints: - matchLabels: k8s:io.kubernetes.pod.namespace: dragonfly app.kubernetes.io/name: dragonfly app: forgejo toPorts: - ports: - port: "6379" protocol: TCP - toEndpoints: - matchLabels: k8s:io.kubernetes.pod.namespace: versitygw app.kubernetes.io/name: versitygw app.kubernetes.io/instance: versitygw toPorts: - ports: - port: "7070" protocol: TCP # In-cluster clients reach S3 through versitygw-direct BGP LoadBalancer (socket-LB VIP). - toCIDR: - 10.66.127.81/32 toPorts: - ports: - port: "443" protocol: TCP - toEndpoints: - matchLabels: k8s:io.kubernetes.pod.namespace: kube-system k8s-app: kube-dns toPorts: - ports: - port: "53" protocol: UDP - port: "53" protocol: TCP # OIDC discovery/token exchange and future repository migrations over HTTPS. - toEntities: - world toPorts: - ports: - port: "443" protocol: TCP --- apiVersion: cilium.io/v2 kind: CiliumClusterwideNetworkPolicy metadata: name: gateway-internal-egress-forgejo spec: endpointSelector: matchLabels: "reserved:ingress": "" egress: - toEndpoints: - matchLabels: k8s:io.kubernetes.pod.namespace: forgejo app.kubernetes.io/name: forgejo app.kubernetes.io/instance: forgejo toPorts: - ports: - port: "3000" protocol: TCP --- apiVersion: cilium.io/v2 kind: CiliumClusterwideNetworkPolicy metadata: name: host-egress-forgejo spec: nodeSelector: {} egress: - toEndpoints: - matchLabels: k8s:io.kubernetes.pod.namespace: forgejo app.kubernetes.io/name: forgejo app.kubernetes.io/instance: forgejo toPorts: - ports: - port: "3000" protocol: TCP - port: "2222" protocol: TCP --- # Same-node Gateway/LB backend selections can return to node-local ephemeral # source ports via the host path. apiVersion: cilium.io/v2 kind: CiliumClusterwideNetworkPolicy metadata: name: host-ingress-forgejo-replies spec: nodeSelector: {} ingress: - fromEndpoints: - matchLabels: k8s:io.kubernetes.pod.namespace: forgejo app.kubernetes.io/name: forgejo app.kubernetes.io/instance: forgejo toPorts: - ports: - port: "32768" endPort: 60999 protocol: TCP