Updates
This commit is contained in:
Executable
+154
@@ -0,0 +1,154 @@
|
||||
#!/bin/bash
|
||||
|
||||
rm ~/.kube/config # comment this out if you have more than one cluster
|
||||
|
||||
# ____________________ EDIT VARIABLES __________________________
|
||||
export NODES=(
|
||||
"sandy" # "192.168.1.14"
|
||||
"gary" # "192.168.1.13"
|
||||
"sheldon" # "192.168.1.16"
|
||||
"pearl" # "192.168.1.19"
|
||||
) # In this script you can replace --host and --server-host with --ip and --server-ip if you don't have DNS names
|
||||
export USER="pleb"
|
||||
export SSH_KEY="/home/pleb/.ssh/bikiniBottom"
|
||||
export CLUSTER_NAME="bikinibottom"
|
||||
export K3SVer="0.13.11"
|
||||
export VIPIP="192.168.1.21" # Virtual IP address that the master nodes will share
|
||||
export VIPHostname="bikinibotton"
|
||||
export NETWORKSuffix="lan"
|
||||
export EXTRAArgs="--disable traefik --disable servicelb"
|
||||
export MetalLB_IPRange="192.168.1.21" # Range for MetalLB to use
|
||||
# _______________________ END OF VARIABLES ______________________
|
||||
|
||||
GREEN='\033[32m'
|
||||
RED='\033[0;31m'
|
||||
ENDCOLOR='\033[0m'
|
||||
|
||||
for index in "${!NODES[@]}"; do
|
||||
echo -e "${GREEN}------- Installing on ${NODES[$index]} -------${ENDCOLOR}"
|
||||
|
||||
# The first server starts the cluster
|
||||
if [[ $index -eq 0 ]]; then
|
||||
k3sup install \
|
||||
--cluster \
|
||||
--user $USER \
|
||||
--host ${NODES[$index]} \
|
||||
--ssh-key $SSH_KEY \
|
||||
--k3s-version $K3SVer \
|
||||
--local-path $HOME/.kube/config \
|
||||
--context $CLUSTER_NAME \
|
||||
--merge \
|
||||
--tls-san $VIPIP --tls-san $VIPHostname --tls-san $VIPHostname.$NETWORKSuffix \
|
||||
--k3s-extra-args "${EXTRAArgs}"
|
||||
elif [[ $index -eq 1 || $index -eq 2 ]]; then
|
||||
# The second and third nodes join as master nodes
|
||||
k3sup join \
|
||||
--server \
|
||||
--host ${NODES[$index]} \
|
||||
--user $USER \
|
||||
--server-user $USER \
|
||||
--server-host ${NODES[0]} \
|
||||
--ssh-key $SSH_KEY \
|
||||
--k3s-version $K3SVer \
|
||||
--k3s-extra-args "${EXTRAArgs}"
|
||||
else
|
||||
# The rest of the nodes join as worker nodes
|
||||
k3sup join \
|
||||
--host ${NODES[$index]} \
|
||||
--server-user $USER \
|
||||
--server-host ${NODES[0]} \
|
||||
--user $USER \
|
||||
--ssh-key $SSH_KEY \
|
||||
--k3s-version $K3SVer
|
||||
fi
|
||||
done
|
||||
|
||||
echo -e "${GREEN}------- k3s installed, moving to backend apps -------${ENDCOLOR}"
|
||||
|
||||
# MetalLB Installation
|
||||
echo -e "${GREEN}------- Installing MetalLB Load Balancer -------${ENDCOLOR}"
|
||||
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.10.3/manifests/namespace.yaml
|
||||
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.10.3/manifests/metallb.yaml
|
||||
cat <<EOF | kubectl apply -f -
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
namespace: metallb-system
|
||||
name: config
|
||||
data:
|
||||
config: |
|
||||
address-pools:
|
||||
- name: default
|
||||
protocol: layer2
|
||||
addresses:
|
||||
- $MetalLB_IPRange
|
||||
EOF
|
||||
|
||||
# Traefik Installation
|
||||
echo -e "${GREEN}------- Installing Traefik Ingress Controller -------${ENDCOLOR}"
|
||||
helm repo add traefik https://traefik.github.io/charts
|
||||
helm repo update
|
||||
# create values.yaml for traefik. Need this to be "local" so that X-Forwarded-For headers are transmitted
|
||||
echo "\
|
||||
additionalArguments:
|
||||
- '--serversTransport.insecureSkipVerify=true'
|
||||
service:
|
||||
spec:
|
||||
externalTrafficPolicy: Local
|
||||
" > /tmp/traefik-values.yaml
|
||||
helm upgrade --install traefik traefik/traefik --create-namespace --namespace traefik --values /tmp/traefik-values.yaml
|
||||
cat <<EOF | kubectl apply -f -
|
||||
apiVersion: traefik.io/v1alpha1
|
||||
kind: IngressRoute
|
||||
metadata:
|
||||
name: dashboard
|
||||
namespace: traefik
|
||||
spec:
|
||||
entryPoints:
|
||||
- web
|
||||
routes:
|
||||
- match: Host('traefik.localhost') && (PathPrefix('/dashboard') || PathPrefix('/api'))
|
||||
kind: Rule
|
||||
services:
|
||||
- name: api@internal
|
||||
kind: TraefikService
|
||||
EOF
|
||||
|
||||
# Cert-Manager Installation
|
||||
echo -e "${GREEN}------- Installing Cert Manager -------${ENDCOLOR}"
|
||||
helm repo add jetstack https://charts.jetstack.io
|
||||
helm repo update
|
||||
helm upgrade --install cert-manager jetstack/cert-manager --namespace cert-manager --create-namespace --set installCRDs=true
|
||||
|
||||
# Test out external IP address assignment with MetalLB
|
||||
sleep 10
|
||||
echo -e "${GREEN}------- Testing out MetalLB Load Balancer -------${ENDCOLOR}"
|
||||
kubens default
|
||||
kubectl create deploy nginx --image=nginx
|
||||
sleep 5
|
||||
kubectl expose deploy nginx --port=80 --target-port=80 --type=LoadBalancer
|
||||
sleep 20
|
||||
external_ip=$(kubectl get service nginx -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
|
||||
if [[ -n "$external_ip" ]]; then
|
||||
echo -e "External IP: $external_ip"
|
||||
if command -v open &> /dev/null; then
|
||||
open "http://${external_ip}:80"
|
||||
elif command -v xdg-open &> /dev/null; then
|
||||
xdg-open "http://${external_ip}:80"
|
||||
elif command -v google-chrome &> /dev/null; then
|
||||
google-chrome "http://${external_ip}:80"
|
||||
else
|
||||
echo -e "${RED}Failed to open web browser. Please manually open a web browser and navigate to http://${external_ip}:80.${ENDCOLOR}"
|
||||
fi
|
||||
else
|
||||
echo -e "${RED}LoadBalancer is still pending, may not be functional yet${ENDCOLOR}"
|
||||
fi
|
||||
|
||||
# Print Traefik External IP
|
||||
echo -e "${GREEN}------- Print Traefik Ingress Point -------${ENDCOLOR}"
|
||||
kubectl get svc -n traefik
|
||||
external_ip=$(kubectl get service traefik -n traefik -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
|
||||
echo -e "\nOn your router, ${GREEN}Port forward${ENDCOLOR} ports 80 and 443 to ${GREEN}$external_ip${ENDCOLOR}"
|
||||
|
||||
|
||||
echo -e "\n${GREEN}------- Setup Complete -------${ENDCOLOR}\n"
|
||||
@@ -0,0 +1,379 @@
|
||||
Kubernetes (K3Sup)
|
||||
===
|
||||
|
||||
### Installation de kubectl ?
|
||||
|
||||
```bash
|
||||
sudo apt-get update && sudo apt-get install -y apt-transport-https ca-certificates curl gnupg
|
||||
sudo mkdir -p -m 755 /etc/apt/keyrings
|
||||
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.33/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
|
||||
sudo chmod 644 /etc/apt/keyrings/kubernetes-apt-keyring.gpg
|
||||
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.33/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
|
||||
sudo chmod 644 /etc/apt/sources.list.d/kubernetes.list
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y kubectl
|
||||
```
|
||||
|
||||
### Installation de k3sup :
|
||||
|
||||
```bash
|
||||
# Avec curl
|
||||
curl -sLS https://get.k3sup.dev | sh
|
||||
sudo install k3sup /usr/local/bin/
|
||||
|
||||
# Ou téléchargement direct depuis GitHub
|
||||
wget https://github.com/alexellis/k3sup/releases/download/0.13.11/k3sup
|
||||
chmod +x k3sup
|
||||
sudo mv k3sup /usr/local/bin/
|
||||
```
|
||||
|
||||
#### Premier déploiement :
|
||||
|
||||
```bash
|
||||
# Installation du master node
|
||||
k3sup install --ip 192.168.1.14 --user pleb --ssh-key $HOME/.ssh/bikiniBottom
|
||||
|
||||
# Ajout des worker nodes
|
||||
k3sup join --ip 192.168.1.13 --server-ip 192.168.1.14 --user pleb --ssh-key $HOME/.ssh/bikiniBottom
|
||||
k3sup join --ip 192.168.1.16 --server-ip 192.168.1.14 --user pleb --ssh-key $HOME/.ssh/bikiniBottom
|
||||
k3sup join --ip 192.168.1.19 --server-ip 192.168.1.14 --user pleb --ssh-key $HOME/.ssh/bikiniBottom
|
||||
```
|
||||
|
||||
#### Vérification du cluster :
|
||||
|
||||
```bash
|
||||
# Export du kubeconfig
|
||||
export KUBECONFIG=~/delmar.bzh/kubernetes/kubeconfig
|
||||
|
||||
# Vérification des nœuds
|
||||
kubectl get nodes -o wide
|
||||
|
||||
# Check des pods système
|
||||
kubectl get pods -n kube-system
|
||||
```
|
||||
|
||||
#### Setting labels:
|
||||
|
||||
```bash
|
||||
# sudo k3s kubectl label nodes xxx kubernetes.io/role=worker
|
||||
kubectl label nodes gary kubernetes.io/role=worker
|
||||
kubectl label nodes sheldon kubernetes.io/role=worker
|
||||
kubectl label nodes pearl kubernetes.io/role=worker
|
||||
|
||||
# sudo k3s kubectl label nodes sandy node-type=worker
|
||||
kubectl label nodes gary node-type=worker
|
||||
kubectl label nodes sheldon node-type=worker
|
||||
kubectl label nodes pearl node-type=worker
|
||||
```
|
||||
|
||||
```bash
|
||||
kubectl get nodes
|
||||
```
|
||||
|
||||
```
|
||||
NAME STATUS ROLES AGE VERSION
|
||||
gary Ready worker 82m v1.35.5+k3s1
|
||||
pearl Ready worker 81m v1.35.5+k3s1
|
||||
sandy Ready control-plane 84m v1.35.5+k3s1
|
||||
sheldon Ready worker 82m v1.35.5+k3s1
|
||||
```
|
||||
|
||||
### Helm
|
||||
|
||||
> On sandy
|
||||
|
||||
```bash
|
||||
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
|
||||
chmod 700 get_helm.sh
|
||||
./get_helm.sh
|
||||
helm version
|
||||
```
|
||||
|
||||
#### [Headlamp](https://headlamp.dev/docs/latest/)
|
||||
|
||||
```bash
|
||||
# first add our custom repo to your local helm repositories
|
||||
helm repo add headlamp https://kubernetes-sigs.github.io/headlamp/
|
||||
|
||||
# now you should be able to install headlamp via helm
|
||||
helm install bb-headlamp headlamp/headlamp --namespace kube-system
|
||||
```
|
||||
|
||||
```
|
||||
NAME: bb-headlamp
|
||||
LAST DEPLOYED: Tue Feb 17 17:17:03 2026
|
||||
NAMESPACE: kube-system
|
||||
STATUS: deployed
|
||||
REVISION: 1
|
||||
TEST SUITE: None
|
||||
NOTES:
|
||||
```
|
||||
|
||||
1. Get the application URL by running these commands:
|
||||
```bash
|
||||
export POD_NAME=$(kubectl get pods --namespace kube-system -l "app.kubernetes.io/name=headlamp,app.kubernetes.io/instance=bb-headlamp" -o jsonpath="{.items[0].metadata.name}")
|
||||
export CONTAINER_PORT=$(kubectl get pod --namespace kube-system $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}")
|
||||
echo "Visit http://127.0.0.1:8080 to use your application"
|
||||
kubectl --namespace kube-system port-forward $POD_NAME 8080:$CONTAINER_PORT
|
||||
```
|
||||
|
||||
2. Get the token using
|
||||
```bash
|
||||
kubectl create token bb-headlamp --namespace kube-system
|
||||
```
|
||||
|
||||
#### metallb
|
||||
|
||||
```bash
|
||||
# Add MetalLB repository to Helm
|
||||
helm repo add metallb https://metallb.github.io/metallb
|
||||
|
||||
# Check the added repository
|
||||
helm search repo metallb
|
||||
|
||||
helm upgrade --install metallb metallb/metallb --create-namespace \
|
||||
--namespace metallb-system --wait
|
||||
```
|
||||
```bash
|
||||
Release "metallb" does not exist. Installing it now.
|
||||
NAME: metallb
|
||||
LAST DEPLOYED: Wed Feb 18 11:46:03 2026
|
||||
NAMESPACE: metallb-system
|
||||
STATUS: deployed
|
||||
REVISION: 1
|
||||
TEST SUITE: None
|
||||
NOTES:
|
||||
MetalLB is now running in the cluster.
|
||||
|
||||
Now you can configure it via its CRs. Please refer to the metallb official docs
|
||||
on how to use the CRs.
|
||||
```
|
||||
```bash
|
||||
vim metallb-config.yaml
|
||||
|
||||
---
|
||||
apiVersion: metallb.io/v1beta1
|
||||
kind: IPAddressPool
|
||||
metadata:
|
||||
name: default-pool
|
||||
namespace: metallb-system
|
||||
spec:
|
||||
addresses:
|
||||
- 192.168.1.21-192.168.1.30
|
||||
|
||||
---
|
||||
apiVersion: metallb.io/v1beta1
|
||||
kind: L2Advertisement
|
||||
metadata:
|
||||
name: default
|
||||
namespace: metallb-system
|
||||
spec:
|
||||
ipAddressPools:
|
||||
- default-pool
|
||||
```
|
||||
|
||||
```bash
|
||||
kubectl -n metallb-system apply -f metallb/metallb-config.yaml
|
||||
```
|
||||
|
||||
#### traefik
|
||||
|
||||
```bash
|
||||
vim traefik-ingress.yml
|
||||
```
|
||||
|
||||
```
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Secret
|
||||
metadata:
|
||||
name: traefik-basic-auth-secret
|
||||
namespace: kube-system
|
||||
data:
|
||||
users: |2
|
||||
YWRtaW46JGFwcjEkMmp5TzMwYmskRE5IV0VEQW1VQXFVajVGOHNvdXNVMAoK
|
||||
|
||||
---
|
||||
apiVersion: traefik.io/v1alpha1
|
||||
kind: Middleware
|
||||
metadata:
|
||||
name: traefik-basic-auth-middleware
|
||||
spec:
|
||||
basicAuth:
|
||||
secret: traefik-basic-auth-secret
|
||||
realm: "Traefik Dashboard"
|
||||
|
||||
---
|
||||
apiVersion: networking.k8s.io/v1
|
||||
kind: Ingress
|
||||
metadata:
|
||||
name: traefik-ingress
|
||||
namespace: kube-system
|
||||
annotations:
|
||||
spec.ingressClassName: traefik
|
||||
traefik.ingress.kubernetes.io/router.middlewares: kube-system-traefik-basic-auth-middleware@kubernetescrd
|
||||
spec:
|
||||
serviceAccountName: traefik-ingress
|
||||
env:
|
||||
name: OVH_ENDPOINT
|
||||
value: ovh-eu
|
||||
name: OVH_APPLICATION_KEY
|
||||
value: 3f8bdfed17f848d8
|
||||
name: OVH_APPLICATION_SECRET
|
||||
value: 6946758d7515ecef108aeb286bf3c7d0
|
||||
name: OVH_CONSUMER_KEY
|
||||
value: 94b2ddf482d36421a33aa6b3aa51595
|
||||
args:
|
||||
- --configFile=/config/traefik.toml
|
||||
volumeMounts:
|
||||
- name: traefik-config
|
||||
mountPath: /config/
|
||||
- name: traefik-custom
|
||||
mountPath: /custom/
|
||||
- name: traefik-certs
|
||||
mountPath: /certs/
|
||||
ports:
|
||||
name: http
|
||||
containerPort: 80
|
||||
name: https
|
||||
containerPort: 443
|
||||
name: dashboard
|
||||
containerPort: 8080
|
||||
volumes:
|
||||
- name: traefik-config
|
||||
configMap:
|
||||
- name: traefik-config
|
||||
- name: traefik-custom
|
||||
- name: traefik-certs
|
||||
persistentVolumeClaim:
|
||||
claimName: traefik-certsrules:
|
||||
- http:
|
||||
paths:
|
||||
- pathType: Prefix
|
||||
path: "/"
|
||||
backend:
|
||||
service:
|
||||
name: traefik-dashboard
|
||||
port:
|
||||
number: 8080
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: traefik-dashboard
|
||||
spec:
|
||||
ports:
|
||||
- name: http
|
||||
port: 8080
|
||||
targetPort: 8080
|
||||
selector:
|
||||
app: traefik-dashboard
|
||||
type: LoadBalancer
|
||||
|
||||
```
|
||||
|
||||
```bash
|
||||
sudo k3s kubectl -n kube-system apply -f traefik-ingress.yml
|
||||
```
|
||||
|
||||
#### [longhorn](https://longhorn.io)
|
||||
|
||||
```bash
|
||||
helm repo add longhorn https://charts.longhorn.io
|
||||
helm repo update
|
||||
kubectl create namespace longhorn-system
|
||||
helm install longhorn longhorn/longhorn --namespace longhorn-system
|
||||
|
||||
USER=admin; PASSWORD=v5bB4OQRDfY5tFJ1; echo "${USER}:$(openssl passwd -stdin -apr1 <<< ${PASSWORD})" >> auth
|
||||
|
||||
kubectl -n longhorn-system create secret generic basic-auth --from-file=auth
|
||||
|
||||
vim longhorn/longhorn-middelwares.yaml
|
||||
````
|
||||
|
||||
```
|
||||
apiVersion: traefik.io/v1alpha1
|
||||
kind: Middleware
|
||||
metadata:
|
||||
name: longhorn-auth
|
||||
namespace: longhorn-system
|
||||
spec:
|
||||
basicAuth:
|
||||
secret: basic-auth
|
||||
---
|
||||
apiVersion: traefik.io/v1alpha1
|
||||
kind: Middleware
|
||||
metadata:
|
||||
name: longhorn-buffering
|
||||
namespace: longhorn-system
|
||||
spec:
|
||||
buffering:
|
||||
# Allows backing image uploads up to 10,000MB
|
||||
maxRequestBodyBytes: 10485760000
|
||||
```
|
||||
|
||||
```bash
|
||||
kubectl apply -f longhorn-middlewares.yml
|
||||
```
|
||||
|
||||
```bash
|
||||
vim longhorn/longhorn-ingress.yaml
|
||||
```
|
||||
|
||||
```
|
||||
apiVersion: networking.k8s.io/v1
|
||||
kind: Ingress
|
||||
metadata:
|
||||
name: longhorn-ingress
|
||||
namespace: longhorn-system
|
||||
annotations:
|
||||
# Connect the middlewares defined in step 2
|
||||
traefik.ingress.kubernetes.io/router.middlewares:
|
||||
longhorn-system-longhorn-auth@kubernetescrd,
|
||||
longhorn-system-longhorn-buffering@kubernetescrd
|
||||
spec:
|
||||
ingressClassName: traefik
|
||||
rules:
|
||||
- http:
|
||||
paths:
|
||||
- path: /
|
||||
pathType: Prefix
|
||||
backend:
|
||||
service:
|
||||
name: longhorn-frontend
|
||||
port:
|
||||
number: 80
|
||||
```
|
||||
|
||||
```bash
|
||||
kubectl -n longhorn-system get pod
|
||||
|
||||
kubectl get storageclass
|
||||
```
|
||||
|
||||
```
|
||||
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
|
||||
local-path (default) rancher.io/local-path Delete WaitForFirstConsumer false 93m
|
||||
longhorn (default) driver.longhorn.io Delete Immediate true 59m
|
||||
longhorn-static driver.longhorn.io Delete Immediate true 59m
|
||||
```
|
||||
|
||||
##### Unset default for "local-path" (emmc)
|
||||
|
||||
```bash
|
||||
kubectl patch storageclass local-path -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"false"}}}'
|
||||
```
|
||||
|
||||
##### Mark longhorn as "default"
|
||||
|
||||
```bash
|
||||
kubectl patch storageclass longhorn -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
|
||||
```
|
||||
|
||||
##### Apply ingress
|
||||
```bash
|
||||
kubectl -n longhorn-system apply -f longhorn/longhorn-ingress.yaml
|
||||
|
||||
kubectl -n longhorn-system get ingress
|
||||
```
|
||||
+3
-3
@@ -1,7 +1,7 @@
|
||||
apiVersion: v1
|
||||
clusters:
|
||||
- cluster:
|
||||
certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJlRENDQVIyZ0F3SUJBZ0lCQURBS0JnZ3Foa2pPUFFRREFqQWpNU0V3SHdZRFZRUUREQmhyTTNNdGMyVnkKZG1WeUxXTmhRREUzT0RRMU16RTJNRFl3SGhjTk1qWXdOekl3TURZeE16STJXaGNOTXpZd056RTNNRFl4TXpJMgpXakFqTVNFd0h3WURWUVFEREJock0zTXRjMlZ5ZG1WeUxXTmhRREUzT0RRMU16RTJNRFl3V1RBVEJnY3Foa2pPClBRSUJCZ2dxaGtqT1BRTUJCd05DQUFScTR4U1VlL1hSQTg4Nk5JakF1cERyTy9nRmVZbW5rRnB6TWZLU091WisKY3NJT2VRZHV4TFRkSy9CR1RDaFd5bjNiejYwQXRmT2wwWnhwMzdnTCtoUEpvMEl3UURBT0JnTlZIUThCQWY4RQpCQU1DQXFRd0R3WURWUjBUQVFIL0JBVXdBd0VCL3pBZEJnTlZIUTRFRmdRVWc0WUpvQTRjTGJvQ1JHb2F1c1JOCkxBUHEvdkV3Q2dZSUtvWkl6ajBFQXdJRFNRQXdSZ0loQU5uSGxXL0RrU1kvSzNYTHVXZU41TUx6WnprbnA3ZWkKblJyam1EeE1tczU5QWlFQXJseCszWGVhNmswT0pQbEt4R1UvMlFJNUpjeGZBUmdmL1dkTGM2QXpoMFk9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K
|
||||
certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJkekNDQVIyZ0F3SUJBZ0lCQURBS0JnZ3Foa2pPUFFRREFqQWpNU0V3SHdZRFZRUUREQmhyTTNNdGMyVnkKZG1WeUxXTmhRREUzT0RRMU16WTVNekV3SGhjTk1qWXdOekl3TURjME1qRXhXaGNOTXpZd056RTNNRGMwTWpFeApXakFqTVNFd0h3WURWUVFEREJock0zTXRjMlZ5ZG1WeUxXTmhRREUzT0RRMU16WTVNekV3V1RBVEJnY3Foa2pPClBRSUJCZ2dxaGtqT1BRTUJCd05DQUFUUklldnhzVGxHY2xkbVMra09taG9DRlY3d2dVUnBaRkRTalJDZ1lzM0MKbW5lZW5Hd1l0UjhCYko1djM0eERXTHV2QnVYVm45NTBxNjRWVFpDaXY5OHVvMEl3UURBT0JnTlZIUThCQWY4RQpCQU1DQXFRd0R3WURWUjBUQVFIL0JBVXdBd0VCL3pBZEJnTlZIUTRFRmdRVVNuTFI4NmhzQWg3VXhyc1RFZDVYCjZyWERiY0l3Q2dZSUtvWkl6ajBFQXdJRFNBQXdSUUloQUtYdjNQOUYvWnd3bWxjRSs5N1RzN2ZSaVpCaFYzS2EKTEtWWUdLU0F0WHpWQWlCclg2OUlKWjVpWFpWcWw3Y050MTlCZVliYVJ1a0N5LzlZcTQrVGlxZFkzQT09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K
|
||||
server: https://192.168.1.14:6443
|
||||
name: default
|
||||
contexts:
|
||||
@@ -14,5 +14,5 @@ kind: Config
|
||||
users:
|
||||
- name: default
|
||||
user:
|
||||
client-certificate-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJrRENDQVRlZ0F3SUJBZ0lJVWsvYm53cms2UnN3Q2dZSUtvWkl6ajBFQXdJd0l6RWhNQjhHQTFVRUF3d1kKYXpOekxXTnNhV1Z1ZEMxallVQXhOemcwTlRNeE5qQTJNQjRYRFRJMk1EY3lNREEyTVRNeU5sb1hEVEkzTURjeQpNREEyTVRNeU5sb3dNREVYTUJVR0ExVUVDaE1PYzNsemRHVnRPbTFoYzNSbGNuTXhGVEFUQmdOVkJBTVRESE41CmMzUmxiVHBoWkcxcGJqQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDlBd0VIQTBJQUJNcFdNMUkwdXl2RWlNMVEKUFN4RlNHMTgzVmZGSU4yKzAzeHNWM2hHbkQ4c3BhOGVrcUIyemtLTmNNKzhOTHVyTE9lZmp3bm9lb1dXQVU2egpDTndlZnVhalNEQkdNQTRHQTFVZER3RUIvd1FFQXdJRm9EQVRCZ05WSFNVRUREQUtCZ2dyQmdFRkJRY0RBakFmCkJnTlZIU01FR0RBV2dCU1MwWnZ5T0RYNlhSd3JvQUIvTmhLcDFyalhtREFLQmdncWhrak9QUVFEQWdOSEFEQkUKQWlBNDEyTnhIODhvNGcrUXpNOUdZUlk1TUlzQW5DOUFPS2xGQk1KKzk4b2ZuUUlnS292U2pFdlRIZHlPR0NEYQoyYU12eEUzS2NpUENoazZaYnQvMkMxYVZPVXc9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJkekNDQVIyZ0F3SUJBZ0lCQURBS0JnZ3Foa2pPUFFRREFqQWpNU0V3SHdZRFZRUUREQmhyTTNNdFkyeHAKWlc1MExXTmhRREUzT0RRMU16RTJNRFl3SGhjTk1qWXdOekl3TURZeE16STJXaGNOTXpZd056RTNNRFl4TXpJMgpXakFqTVNFd0h3WURWUVFEREJock0zTXRZMnhwWlc1MExXTmhRREUzT0RRMU16RTJNRFl3V1RBVEJnY3Foa2pPClBRSUJCZ2dxaGtqT1BRTUJCd05DQUFRcVVKcXlDZk9aYjdBLzgxZUc4V1pNNU1Ca3FkZDZSbnFRVmRtem4zYloKYlA4Sk5hY0pNeTVPWHlRWlo0amx4VFN5ZmtzeDZBSG5Wc3IyblRmSmFPRFRvMEl3UURBT0JnTlZIUThCQWY4RQpCQU1DQXFRd0R3WURWUjBUQVFIL0JBVXdBd0VCL3pBZEJnTlZIUTRFRmdRVWt0R2I4amcxK2wwY0s2QUFmellTCnFkYTQxNWd3Q2dZSUtvWkl6ajBFQXdJRFNBQXdSUUloQU04M0tlM1hxeTF0UmlFVlc0RkZzRzRIZmRsekJXa2wKelZwNDRjbnd3bFdtQWlBb3JVN0Q2MVlQU2YyTGViSVZzbEJCOHkrQzVGMHNGQkRSVzlHMjkrUHRjZz09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K
|
||||
client-key-data: LS0tLS1CRUdJTiBFQyBQUklWQVRFIEtFWS0tLS0tCk1IY0NBUUVFSUUxNFhIc3NoY0FNUEU5czJ5bDI0azRSL0E3ZHNSdE05VFREK0pFTWlXMEhvQW9HQ0NxR1NNNDkKQXdFSG9VUURRZ0FFeWxZelVqUzdLOFNJelZBOUxFVkliWHpkVjhVZzNiN1RmR3hYZUVhY1B5eWxyeDZTb0hiTwpRbzF3ejd3MHU2c3M1NStQQ2VoNmhaWUJUck1JM0I1KzVnPT0KLS0tLS1FTkQgRUMgUFJJVkFURSBLRVktLS0tLQo=
|
||||
client-certificate-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJrVENDQVRlZ0F3SUJBZ0lJTy9TcFRDc0k4QWt3Q2dZSUtvWkl6ajBFQXdJd0l6RWhNQjhHQTFVRUF3d1kKYXpOekxXTnNhV1Z1ZEMxallVQXhOemcwTlRNMk9UTXhNQjRYRFRJMk1EY3lNREEzTkRJeE1Wb1hEVEkzTURjeQpNREEzTkRJeE1Wb3dNREVYTUJVR0ExVUVDaE1PYzNsemRHVnRPbTFoYzNSbGNuTXhGVEFUQmdOVkJBTVRESE41CmMzUmxiVHBoWkcxcGJqQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDlBd0VIQTBJQUJDVnZob3ZsS0VnWlpLMTQKS1lKWHdPMGtGNjM1eHJYeFJnZGVOU25pRWlIM1IzUWRreDZFUUNKdldhRzVEM3ZncXkrUnFucURXbDBjd2JxLwpsRlRRSWxtalNEQkdNQTRHQTFVZER3RUIvd1FFQXdJRm9EQVRCZ05WSFNVRUREQUtCZ2dyQmdFRkJRY0RBakFmCkJnTlZIU01FR0RBV2dCUXhrcTUvSGdFdVFCSUJpSFNUU1liOW5aNEZ2akFLQmdncWhrak9QUVFEQWdOSUFEQkYKQWlCQVpHWi8zaGIrZTNLcFBuS0ExbzVLQnhUaGZUYzJ0N3RUUWkzNnJ6bi96Z0loQUtCNUdBMkUzZEVaUHhhWgpkVzU1Vkw4Z2VueDYyQUlnbStqcVQzckdQUFBaCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJkekNDQVIyZ0F3SUJBZ0lCQURBS0JnZ3Foa2pPUFFRREFqQWpNU0V3SHdZRFZRUUREQmhyTTNNdFkyeHAKWlc1MExXTmhRREUzT0RRMU16WTVNekV3SGhjTk1qWXdOekl3TURjME1qRXhXaGNOTXpZd056RTNNRGMwTWpFeApXakFqTVNFd0h3WURWUVFEREJock0zTXRZMnhwWlc1MExXTmhRREUzT0RRMU16WTVNekV3V1RBVEJnY3Foa2pPClBRSUJCZ2dxaGtqT1BRTUJCd05DQUFRejhWSzgzaUp5V28raHBEMHBvc3AzTEczOUJINTRBd0h0dVgzQldkM3QKN2NMc1ZOVXRlMHc4bFNtZlFmd2xFanNFdWFpc1kwd3FwdmVTMElrZGp1M0hvMEl3UURBT0JnTlZIUThCQWY4RQpCQU1DQXFRd0R3WURWUjBUQVFIL0JBVXdBd0VCL3pBZEJnTlZIUTRFRmdRVU1aS3VmeDRCTGtBU0FZaDBrMG1HCi9aMmVCYjR3Q2dZSUtvWkl6ajBFQXdJRFNBQXdSUUlnUG02T2J6djRRS2JrUXZEajNtNzM3Rm40cnFLRC9iamQKQTFNelNHaExpaXNDSVFEaEdnNWxiRGdidzdKMFQ4LzMzTlltMVIxRzd6YWdSVFhxeUNCQXFBcHJiQT09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K
|
||||
client-key-data: LS0tLS1CRUdJTiBFQyBQUklWQVRFIEtFWS0tLS0tCk1IY0NBUUVFSUdRRFlyaGRIQWIvM0hXVFBqNTFvZHNTNVRZQng3UklRdkQ3NmtiZDR4S0VvQW9HQ0NxR1NNNDkKQXdFSG9VUURRZ0FFSlcrR2krVW9TQmxrclhncGdsZkE3U1FYcmZuR3RmRkdCMTQxS2VJU0lmZEhkQjJUSG9SQQpJbTlab2JrUGUrQ3JMNUdxZW9OYVhSekJ1citVVk5BaVdRPT0KLS0tLS1FTkQgRUMgUFJJVkFURSBLRVktLS0tLQo=
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
apiVersion: v1
|
||||
clusters:
|
||||
- cluster:
|
||||
certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJlRENDQVIyZ0F3SUJBZ0lCQURBS0JnZ3Foa2pPUFFRREFqQWpNU0V3SHdZRFZRUUREQmhyTTNNdGMyVnkKZG1WeUxXTmhRREUzT0RRMU16RTJNRFl3SGhjTk1qWXdOekl3TURZeE16STJXaGNOTXpZd056RTNNRFl4TXpJMgpXakFqTVNFd0h3WURWUVFEREJock0zTXRjMlZ5ZG1WeUxXTmhRREUzT0RRMU16RTJNRFl3V1RBVEJnY3Foa2pPClBRSUJCZ2dxaGtqT1BRTUJCd05DQUFScTR4U1VlL1hSQTg4Nk5JakF1cERyTy9nRmVZbW5rRnB6TWZLU091WisKY3NJT2VRZHV4TFRkSy9CR1RDaFd5bjNiejYwQXRmT2wwWnhwMzdnTCtoUEpvMEl3UURBT0JnTlZIUThCQWY4RQpCQU1DQXFRd0R3WURWUjBUQVFIL0JBVXdBd0VCL3pBZEJnTlZIUTRFRmdRVWc0WUpvQTRjTGJvQ1JHb2F1c1JOCkxBUHEvdkV3Q2dZSUtvWkl6ajBFQXdJRFNRQXdSZ0loQU5uSGxXL0RrU1kvSzNYTHVXZU41TUx6WnprbnA3ZWkKblJyam1EeE1tczU5QWlFQXJseCszWGVhNmswT0pQbEt4R1UvMlFJNUpjeGZBUmdmL1dkTGM2QXpoMFk9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K
|
||||
server: https://192.168.1.14:6443
|
||||
name: default
|
||||
contexts:
|
||||
- context:
|
||||
cluster: default
|
||||
user: default
|
||||
name: default
|
||||
current-context: default
|
||||
kind: Config
|
||||
users:
|
||||
- name: default
|
||||
user:
|
||||
client-certificate-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJrRENDQVRlZ0F3SUJBZ0lJVWsvYm53cms2UnN3Q2dZSUtvWkl6ajBFQXdJd0l6RWhNQjhHQTFVRUF3d1kKYXpOekxXTnNhV1Z1ZEMxallVQXhOemcwTlRNeE5qQTJNQjRYRFRJMk1EY3lNREEyTVRNeU5sb1hEVEkzTURjeQpNREEyTVRNeU5sb3dNREVYTUJVR0ExVUVDaE1PYzNsemRHVnRPbTFoYzNSbGNuTXhGVEFUQmdOVkJBTVRESE41CmMzUmxiVHBoWkcxcGJqQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDlBd0VIQTBJQUJNcFdNMUkwdXl2RWlNMVEKUFN4RlNHMTgzVmZGSU4yKzAzeHNWM2hHbkQ4c3BhOGVrcUIyemtLTmNNKzhOTHVyTE9lZmp3bm9lb1dXQVU2egpDTndlZnVhalNEQkdNQTRHQTFVZER3RUIvd1FFQXdJRm9EQVRCZ05WSFNVRUREQUtCZ2dyQmdFRkJRY0RBakFmCkJnTlZIU01FR0RBV2dCU1MwWnZ5T0RYNlhSd3JvQUIvTmhLcDFyalhtREFLQmdncWhrak9QUVFEQWdOSEFEQkUKQWlBNDEyTnhIODhvNGcrUXpNOUdZUlk1TUlzQW5DOUFPS2xGQk1KKzk4b2ZuUUlnS292U2pFdlRIZHlPR0NEYQoyYU12eEUzS2NpUENoazZaYnQvMkMxYVZPVXc9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJkekNDQVIyZ0F3SUJBZ0lCQURBS0JnZ3Foa2pPUFFRREFqQWpNU0V3SHdZRFZRUUREQmhyTTNNdFkyeHAKWlc1MExXTmhRREUzT0RRMU16RTJNRFl3SGhjTk1qWXdOekl3TURZeE16STJXaGNOTXpZd056RTNNRFl4TXpJMgpXakFqTVNFd0h3WURWUVFEREJock0zTXRZMnhwWlc1MExXTmhRREUzT0RRMU16RTJNRFl3V1RBVEJnY3Foa2pPClBRSUJCZ2dxaGtqT1BRTUJCd05DQUFRcVVKcXlDZk9aYjdBLzgxZUc4V1pNNU1Ca3FkZDZSbnFRVmRtem4zYloKYlA4Sk5hY0pNeTVPWHlRWlo0amx4VFN5ZmtzeDZBSG5Wc3IyblRmSmFPRFRvMEl3UURBT0JnTlZIUThCQWY4RQpCQU1DQXFRd0R3WURWUjBUQVFIL0JBVXdBd0VCL3pBZEJnTlZIUTRFRmdRVWt0R2I4amcxK2wwY0s2QUFmellTCnFkYTQxNWd3Q2dZSUtvWkl6ajBFQXdJRFNBQXdSUUloQU04M0tlM1hxeTF0UmlFVlc0RkZzRzRIZmRsekJXa2wKelZwNDRjbnd3bFdtQWlBb3JVN0Q2MVlQU2YyTGViSVZzbEJCOHkrQzVGMHNGQkRSVzlHMjkrUHRjZz09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K
|
||||
client-key-data: LS0tLS1CRUdJTiBFQyBQUklWQVRFIEtFWS0tLS0tCk1IY0NBUUVFSUUxNFhIc3NoY0FNUEU5czJ5bDI0azRSL0E3ZHNSdE05VFREK0pFTWlXMEhvQW9HQ0NxR1NNNDkKQXdFSG9VUURRZ0FFeWxZelVqUzdLOFNJelZBOUxFVkliWHpkVjhVZzNiN1RmR3hYZUVhY1B5eWxyeDZTb0hiTwpRbzF3ejd3MHU2c3M1NStQQ2VoNmhaWUJUck1JM0I1KzVnPT0KLS0tLS1FTkQgRUMgUFJJVkFURSBLRVktLS0tLQo=
|
||||
@@ -0,0 +1,18 @@
|
||||
apiVersion: traefik.io/v1alpha1
|
||||
kind: Middleware
|
||||
metadata:
|
||||
name: longhorn-auth
|
||||
namespace: longhorn-system
|
||||
spec:
|
||||
basicAuth:
|
||||
secret: basic-auth
|
||||
---
|
||||
apiVersion: traefik.io/v1alpha1
|
||||
kind: Middleware
|
||||
metadata:
|
||||
name: longhorn-buffering
|
||||
namespace: longhorn-system
|
||||
spec:
|
||||
buffering:
|
||||
# Allows backing image uploads up to 10,000MB
|
||||
maxRequestBodyBytes: 10485760000
|
||||
@@ -6,7 +6,7 @@ metadata:
|
||||
namespace: metallb-system
|
||||
spec:
|
||||
addresses:
|
||||
- 192.168.1.21
|
||||
- 192.168.1.21-192.168.1.30
|
||||
|
||||
---
|
||||
apiVersion: metallb.io/v1beta1
|
||||
|
||||
@@ -8,7 +8,40 @@ metadata:
|
||||
spec.ingressClassName: traefik
|
||||
traefik.ingress.kubernetes.io/router.middlewares: kube-system-traefik-basic-auth-middleware@kubernetescrd
|
||||
spec:
|
||||
rules:
|
||||
serviceAccountName: traefik-ingress
|
||||
env:
|
||||
name: OVH_ENDPOINT
|
||||
value: ovh-eu
|
||||
name: OVH_APPLICATION_KEY
|
||||
value: 3f8bdfed17f848d8
|
||||
name: OVH_APPLICATION_SECRET
|
||||
value: 6946758d7515ecef108aeb286bf3c7d0
|
||||
name: OVH_CONSUMER_KEY
|
||||
value: 94b2ddf482d36421a33aa6b3aa51595
|
||||
args:
|
||||
- --configFile=/config/traefik.toml
|
||||
volumeMounts:
|
||||
- name: traefik-config
|
||||
mountPath: /config/
|
||||
- name: traefik-custom
|
||||
mountPath: /custom/
|
||||
- name: traefik-certs
|
||||
mountPath: /certs/
|
||||
ports:
|
||||
name: http
|
||||
containerPort: 80
|
||||
name: https
|
||||
containerPort: 443
|
||||
name: dashboard
|
||||
containerPort: 8080
|
||||
volumes:
|
||||
- name: traefik-config
|
||||
configMap:
|
||||
- name: traefik-config
|
||||
- name: traefik-custom
|
||||
- name: traefik-certs
|
||||
persistentVolumeClaim:
|
||||
claimName: traefik-certsrules:
|
||||
- http:
|
||||
paths:
|
||||
- pathType: Prefix
|
||||
@@ -18,3 +51,18 @@ spec:
|
||||
name: traefik-dashboard
|
||||
port:
|
||||
number: 8080
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: traefik-dashboard
|
||||
spec:
|
||||
ports:
|
||||
- name: http
|
||||
port: 8080
|
||||
targetPort: 8080
|
||||
selector:
|
||||
app: traefik-dashboard
|
||||
type: LoadBalancer
|
||||
|
||||
|
||||
Reference in New Issue
Block a user