Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
91 changes: 91 additions & 0 deletions deploy/kubernetes/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
# Kubernetes Static Manifests

⚠️ **IMPORTANT**: These files are **auto-generated** from Helm templates. Do not edit them directly!

## About These Files

This directory contains pre-rendered Kubernetes manifests for deploying EasyHAProxy without Helm. These are generated from the Helm chart at `../../helm/easyhaproxy/` and provide three deployment options:

| File | Type | Use Case |
|-----------------------------|------------------------|--------------------------------------------------------------|
| `easyhaproxy-daemonset.yml` | DaemonSet + hostPort | Direct host networking, best for bare-metal or simple setups |
| `easyhaproxy-nodeport.yml` | Deployment + NodePort | Exposes via NodePort (31080/31443/31936) |
| `easyhaproxy-clusterip.yml` | Deployment + ClusterIP | Internal cluster access only, use with external LoadBalancer |

## How to Use

Choose the manifest that fits your deployment scenario:

```bash
# Option 1: DaemonSet mode (hostPort)
kubectl apply -f easyhaproxy-daemonset.yml

# Option 2: NodePort mode
kubectl apply -f easyhaproxy-nodeport.yml

# Option 3: ClusterIP mode
kubectl apply -f easyhaproxy-clusterip.yml
```

For more details, see the [Kubernetes documentation](../../docs/kubernetes.md).

## Regenerating These Files

**When to regenerate:**
- After modifying Helm chart templates (`helm/easyhaproxy/templates/`)
- After updating default values (`helm/easyhaproxy/values.yaml`)
- After a new release to sync with latest Helm chart

**How to regenerate:**

```bash
# Navigate to helm directory
cd helm

# Generate DaemonSet manifest (hostPort mode)
helm template ingress ./easyhaproxy --namespace easyhaproxy \
--set service.create=false \
> ../deploy/kubernetes/easyhaproxy-daemonset.yml

# Generate NodePort manifest
helm template ingress ./easyhaproxy --namespace easyhaproxy \
--set service.create=true \
--set service.type=NodePort \
> ../deploy/kubernetes/easyhaproxy-nodeport.yml

# Generate ClusterIP manifest
helm template ingress ./easyhaproxy --namespace easyhaproxy \
--set service.create=true \
--set service.type=ClusterIP \
> ../deploy/kubernetes/easyhaproxy-clusterip.yml
```

**Verify regeneration:**

```bash
# Check IngressClass is present
grep "kind: IngressClass" ../deploy/kubernetes/easyhaproxy-*.yml

# Validate manifest syntax
kubectl apply --dry-run=client -f ../deploy/kubernetes/easyhaproxy-daemonset.yml
```

## What's Included

Each manifest contains:
- **ServiceAccount**: RBAC identity for EasyHAProxy
- **ClusterRole**: Permissions to read Ingress resources and Secrets
- **ClusterRoleBinding**: Binds the role to the service account
- **IngressClass**: Defines `easyhaproxy` as the ingress class
- **DaemonSet/Deployment**: The EasyHAProxy workload
- **Service** (NodePort/ClusterIP only): Network exposure

## Source of Truth

The Helm chart at `../../helm/easyhaproxy/` is the **source of truth**. All changes should be made there, then these static manifests regenerated.

**To modify these deployments:**
1. Edit Helm templates in `helm/easyhaproxy/templates/`
2. Update default values in `helm/easyhaproxy/values.yaml`
3. Regenerate static manifests using commands above
4. Commit both Helm changes and regenerated manifests
68 changes: 40 additions & 28 deletions deploy/kubernetes/easyhaproxy-clusterip.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ metadata:
name: ingress-easyhaproxy
namespace: easyhaproxy
labels:
helm.sh/chart: easyhaproxy-1.0.1
helm.sh/chart: easyhaproxy-1.0.0
app.kubernetes.io/name: easyhaproxy
app.kubernetes.io/instance: ingress
app.kubernetes.io/version: "5.0.0"
Expand All @@ -19,7 +19,7 @@ metadata:
name: ingress-easyhaproxy
namespace: easyhaproxy
labels:
helm.sh/chart: easyhaproxy-1.0.1
helm.sh/chart: easyhaproxy-1.0.0
app.kubernetes.io/name: easyhaproxy
app.kubernetes.io/instance: ingress
app.kubernetes.io/version: "5.0.0"
Expand All @@ -30,7 +30,7 @@ rules:
resources:
# - configmaps
# - endpoints
# - nodes
- nodes
- pods
- services
- namespaces
Expand All @@ -41,23 +41,21 @@ rules:
- list
- watch
- apiGroups:
- "extensions"
- "networking.k8s.io"
resources:
- ingresses
# - ingresses/status
# - ingressclasses
- ingresses/status
- ingressclasses
verbs:
- get
- list
- watch
# - apiGroups:
# - "extensions"
# - "networking.k8s.io"
# resources:
# - ingresses/status
# verbs:
# - update
- apiGroups:
- "networking.k8s.io"
resources:
- ingresses/status
verbs:
- patch
- apiGroups:
- ""
resources:
Expand Down Expand Up @@ -85,7 +83,7 @@ metadata:
name: ingress-easyhaproxy
namespace: easyhaproxy
labels:
helm.sh/chart: easyhaproxy-1.0.1
helm.sh/chart: easyhaproxy-1.0.0
app.kubernetes.io/name: easyhaproxy
app.kubernetes.io/instance: ingress
app.kubernetes.io/version: "5.0.0"
Expand All @@ -107,7 +105,7 @@ metadata:
name: ingress-easyhaproxy
namespace: easyhaproxy
labels:
helm.sh/chart: easyhaproxy-1.0.1
helm.sh/chart: easyhaproxy-1.0.0
app.kubernetes.io/name: easyhaproxy
app.kubernetes.io/instance: ingress
app.kubernetes.io/version: "5.0.0"
Expand Down Expand Up @@ -139,12 +137,13 @@ metadata:
name: ingress-easyhaproxy
namespace: easyhaproxy
labels:
helm.sh/chart: easyhaproxy-1.0.1
helm.sh/chart: easyhaproxy-1.0.0
app.kubernetes.io/name: easyhaproxy
app.kubernetes.io/instance: ingress
app.kubernetes.io/version: "5.0.0"
app.kubernetes.io/managed-by: Helm
spec:
replicas: 1
selector:
matchLabels:
app.kubernetes.io/name: easyhaproxy
Expand All @@ -155,15 +154,6 @@ spec:
app.kubernetes.io/name: easyhaproxy
app.kubernetes.io/instance: ingress
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: easyhaproxy/node
operator: In
values:
- master
serviceAccountName: ingress-easyhaproxy
securityContext:
{}
Expand All @@ -184,9 +174,7 @@ spec:
containerPort: 1936

resources:
requests:
cpu: 100m
memory: 128Mi
{}
env:
- name: EASYHAPROXY_DISCOVER
value: kubernetes
Expand All @@ -206,3 +194,27 @@ spec:
value: DEBUG
- name: CERTBOT_LOG_LEVEL
value: DEBUG
- name: POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: EASYHAPROXY_UPDATE_INGRESS_STATUS
value: "true"
- name: EASYHAPROXY_DEPLOYMENT_MODE
value: "auto"
- name: EASYHAPROXY_STATUS_UPDATE_INTERVAL
value: "30"
---
# Source: easyhaproxy/templates/ingressclass.yaml
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
name: easyhaproxy
labels:
helm.sh/chart: easyhaproxy-1.0.0
app.kubernetes.io/name: easyhaproxy
app.kubernetes.io/instance: ingress
app.kubernetes.io/version: "5.0.0"
app.kubernetes.io/managed-by: Helm
spec:
controller: byjg.com/easyhaproxy
56 changes: 38 additions & 18 deletions deploy/kubernetes/easyhaproxy-daemonset.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ metadata:
name: ingress-easyhaproxy
namespace: easyhaproxy
labels:
helm.sh/chart: easyhaproxy-1.0.1
helm.sh/chart: easyhaproxy-1.0.0
app.kubernetes.io/name: easyhaproxy
app.kubernetes.io/instance: ingress
app.kubernetes.io/version: "5.0.0"
Expand All @@ -19,7 +19,7 @@ metadata:
name: ingress-easyhaproxy
namespace: easyhaproxy
labels:
helm.sh/chart: easyhaproxy-1.0.1
helm.sh/chart: easyhaproxy-1.0.0
app.kubernetes.io/name: easyhaproxy
app.kubernetes.io/instance: ingress
app.kubernetes.io/version: "5.0.0"
Expand All @@ -30,7 +30,7 @@ rules:
resources:
# - configmaps
# - endpoints
# - nodes
- nodes
- pods
- services
- namespaces
Expand All @@ -41,23 +41,21 @@ rules:
- list
- watch
- apiGroups:
- "extensions"
- "networking.k8s.io"
resources:
- ingresses
# - ingresses/status
# - ingressclasses
- ingresses/status
- ingressclasses
verbs:
- get
- list
- watch
# - apiGroups:
# - "extensions"
# - "networking.k8s.io"
# resources:
# - ingresses/status
# verbs:
# - update
- apiGroups:
- "networking.k8s.io"
resources:
- ingresses/status
verbs:
- patch
- apiGroups:
- ""
resources:
Expand Down Expand Up @@ -85,7 +83,7 @@ metadata:
name: ingress-easyhaproxy
namespace: easyhaproxy
labels:
helm.sh/chart: easyhaproxy-1.0.1
helm.sh/chart: easyhaproxy-1.0.0
app.kubernetes.io/name: easyhaproxy
app.kubernetes.io/instance: ingress
app.kubernetes.io/version: "5.0.0"
Expand All @@ -106,7 +104,7 @@ metadata:
name: ingress-easyhaproxy
namespace: easyhaproxy
labels:
helm.sh/chart: easyhaproxy-1.0.1
helm.sh/chart: easyhaproxy-1.0.0
app.kubernetes.io/name: easyhaproxy
app.kubernetes.io/instance: ingress
app.kubernetes.io/version: "5.0.0"
Expand Down Expand Up @@ -151,9 +149,7 @@ spec:
containerPort: 1936
hostPort: 1936
resources:
requests:
cpu: 100m
memory: 128Mi
{}
env:
- name: EASYHAPROXY_DISCOVER
value: kubernetes
Expand All @@ -173,3 +169,27 @@ spec:
value: DEBUG
- name: CERTBOT_LOG_LEVEL
value: DEBUG
- name: POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: EASYHAPROXY_UPDATE_INGRESS_STATUS
value: "true"
- name: EASYHAPROXY_DEPLOYMENT_MODE
value: "auto"
- name: EASYHAPROXY_STATUS_UPDATE_INTERVAL
value: "30"
---
# Source: easyhaproxy/templates/ingressclass.yaml
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
name: easyhaproxy
labels:
helm.sh/chart: easyhaproxy-1.0.0
app.kubernetes.io/name: easyhaproxy
app.kubernetes.io/instance: ingress
app.kubernetes.io/version: "5.0.0"
app.kubernetes.io/managed-by: Helm
spec:
controller: byjg.com/easyhaproxy
Loading