Aller au contenu principal
Sommaire de la formation

Déploiement de gate api avec cilium gateway-controller

coolibra318 vues

Gateway API :

  • Déploiement :

    • Prérequis
    • Deployer un cluster rke2
    • Installer Gateway API avec cilium gateway-controller


 

Prérequis

  • Connaitre les bases de k8s

 

Installer Gateway API avec cilium gateway-controller

  • Deployer un cluster rke2
      • Créer 3 VMs avec 3vCPU et 5Go RAM
      • Desactive kube-proxy, il sera remplacé par cilium
      • Desactive canal, il sera remplacé par cilium cni
      • Désactive nginx-ingress-controller, il sera remplacé par gaetway-api

 

sudo su
apt update -y && sudo apt install -y jq curl
apt install -y containerd && systemctl start containerd.service && systemctl status containerd.service

mkdir -p /var/lib/rancher/rke2/server/manifests

curl https://kube-vip.io/manifests/rbac.yaml > /var/lib/rancher/rke2/server/manifests/kube-vip-rbac.yaml

export KVVERSION=$(curl -sL https://api.github.com/repos/kube-vip/kube-vip/releases | jq -r '.[0].name')
echo "KVVERSION : $KVVERSION"

export VIP="10.10.10.11"

alias kube-vip="ctr image pull ghcr.io/kube-vip/kube-vip:$KVVERSION; ctr run --rm --net-host ghcr.io/kube-vip/kube-vip:$KVVERSION vip /kube-vip"

kube-vip manifest daemonset \
    --address $VIP \
    --inCluster \
    --taint \
    --controlplane \
    --services \
    --arp \
    --leaderElection | tee  /var/lib/rancher/rke2/server/manifests/kube-vip.yaml

cat /var/lib/rancher/rke2/server/manifests/kube-vip.yaml

 

    • Initier le cluster sur le premier node control-plane
sudo su

# server node
curl -sfL https://get.rke2.io | INSTALL_RKE2_TYPE="server" INSTALL_RKE2_VERSION="v1.34.1+rke2r1" sh -

systemctl enable rke2-server.service

sudo mkdir -p /etc/rancher/rke2

sudo tee /etc/rancher/rke2/config.yaml << EOF
write-kubeconfig-mode: "0644"
token: JDKJDKJFDkdklfdlkdf14528654455211566332
disable-kube-proxy: true
disable:
  - rke2-ingress-nginx
  - rke2-canal
kube-controller-manager-arg:
  - "bind-address=0.0.0.0"
kube-scheduler-arg:
  - "bind-address=0.0.0.0"
etcd-expose-metrics: true
kube-proxy-arg:
  - "metrics-bind-address=0.0.0.0:10249"
tls-san:
  - 10.10.10.11
EOF

systemctl start rke2-server.service

systemctl status rke2-server.service

export KUBECONFIG=/etc/rancher/rke2/rke2.yaml
/var/lib/rancher/rke2/bin/kubectl get nodes
/var/lib/rancher/rke2/bin/kubectl get po -A

 

 

Sur la capture ci-dessous, on voit que coredns est pending. C'est parcque le cni plugin n'est pas encore deployé. Dans notre cas ça sera cilium.

 

Depluis le premier node control-plane, on recupere le kubeconfig avec cette commande et remplacer l"ip 127.0.0.1 par l'ip du permier control-plane.

  • Configurer kubectl sur le master (control-plane 01)
mkdir -p $HOME/.kube
sudo cp -i /etc/rancher/rke2/rke2.yaml $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
sudo mv /var/lib/rancher/rke2/bin/kubectl /usr/local/bin/
kubectl get nodes

 

 

Se positionner sur le context recuperé pour deployer cilium

    • cilium-values.yaml
      • Activation de kubeProxyReplacement
      • Activation de gateway api
kubeProxyReplacement: true
k8sServiceHost: "localhost"
k8sServicePort: "6443"
encryption:
  enabled: true
  type: wireguard
  nodeEncryption: true
  strictMode:
    enabled: true
    cidr: "10.42.0.0/16"
ipam:
  operator:
    clusterPoolIPv4PodCIDRList: ["10.42.0.0/16"]
gatewayAPI:
  enabled: true  # active gateway api

bgpControlPlane:
  enabled: true
operator:
  enabled: true
  replicas: 1

 

  • Deployer cilium
helm repo add cilium https://helm.cilium.io
helm repo update
helm upgrade --install cilium-cni cilium/cilium -n cilium-system --version 1.18.3 -f cilium-values.yaml --create-namespace

 

Une fois que le node est ready, on peut remplacer l'ip <<10.10.10.11>> dans le kubeconfig pour pointer le la VIP. 

    • cilium-operator:  Control Plane

    • cilium- & cilium-envoy-Data Plane

 

  • Joindre les autres masters au cluster
sudo su

# server node
curl -sfL https://get.rke2.io | INSTALL_RKE2_TYPE="server" INSTALL_RKE2_VERSION="v1.34.1+rke2r1" sh -

systemctl enable rke2-server.service

sudo mkdir -p /etc/rancher/rke2

sudo tee /etc/rancher/rke2/config.yaml << EOF
server: https://10.10.10.11:9345
disable-kube-proxy: true
disable:
  - rke2-ingress-nginx
  - rke2-canal
write-kubeconfig-mode: "0644"
token: JDKJDKJFDkdklfdlkdf14528654455211566332
kube-controller-manager-arg:
  - "bind-address=0.0.0.0"
kube-scheduler-arg:
  - "bind-address=0.0.0.0"
etcd-expose-metrics: true
kube-proxy-arg:
  - "metrics-bind-address=0.0.0.0:10249"
tls-san:
  - 10.10.10.11
EOF

systemctl start rke2-server.service

systemctl status rke2-server.service

export KUBECONFIG=/etc/rancher/rke2/rke2.yaml
/var/lib/rancher/rke2/bin/kubectl get nodes
/var/lib/rancher/rke2/bin/kubectl get po -A

 

  • Joindre les workers au cluster
    • Dans cet exemple je me suis limité à 3 nodes control-plane qui seront workers egallement.
sudo su

# agent node
curl -sfL https://get.rke2.io | INSTALL_RKE2_TYPE="agent" INSTALL_RKE2_VERSION="v1.34.1+rke2r1" sh -

systemctl enable rke2-agent.service

# creer le fichier config.yaml avec le contenu server et token
sudo mkdir -p /etc/rancher/rke2

sudo tee /etc/rancher/rke2/config.yaml << EOF
server: https://10.10.10.11:9345
token: JDKJDKJFDkdklfdlkdf14528654455211566332
EOF

systemctl start rke2-agent.service

systemctl status rke2-agent.service


export KUBECONFIG=/etc/rancher/rke2/rke2.yaml
/var/lib/rancher/rke2/bin/kubectl get nodes
/var/lib/rancher/rke2/bin/kubectl get po -A

 

 

Pour que gateway api fonctione, il faut deployer les crd

export GATEWAY_API_VERSION=v1.4.0
kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/download/$GATEWAY_API_VERSION/standard-install.yaml

 

 

  • Cilium supporte l'ipam des service type LoadBalancer
    • Pour l'activer, il faut juste créer un CiliumLoadBalancerIPPool avec le range d'ip
apiVersion: "cilium.io/v2alpha1"
kind: CiliumLoadBalancerIPPool
metadata:
  name: "default-pool"
  namespace: cilium-system
spec:
  blocks:
  # - cidr: "10.0.10.0/24"
  - start: "10.10.10.5"
    stop:  "10.10.10.8"

 

  • Appliquer le fichier
kubectl apply -f cilium-ippool.yaml

 

  • Deployer Cert-manager
    • let's encrypt pour les certificats dns challenge
    • Activer gateway api
    • clusterissuer avec dns challenge pour cloudflare. A adapter selon votre cas
    • cert-manager-values.yaml
installCRDs: true
config:
  apiVersion: "controller.config.cert-manager.io/v1alpha1"
  kind: "ControllerConfiguration"
  enableGatewayAPI: true
extraObjects: []

 

  • Deployer cert-manager
helm repo add jetstack https://charts.jetstack.io --force-update
helm repo update
helm upgrade --install cert-manager jetstack/cert-manager -n cert-manager --version 1.19.1 -f cert-manager.yaml --create-namespace

 

  • Créer un clusterissuer
    • Mon domaine est chez cloudflare. Donc à adapter selon votre cas.
apiVersion: v1
kind: Secret
metadata:
  name: cloudflare-api-token-secret
  namespace: cert-manager
type: Opaque
stringData:
  api-token:  dfdkfdkfdkfdkfdkfdfdfd
---  
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: letsencrypt-prod
spec:
  acme:
    email: devops@techledger.io
    server: https://acme-v02.api.letsencrypt.org/directory
    privateKeySecretRef:
      name: techledger-issuer-account-key
    solvers:
    - dns01:
        cloudflare:
          email: devops@techledger.io  # cloudflare email
          apiTokenSecretRef:
            name: cloudflare-api-token-secret
            key: api-token

 

  • Appliquer le fichier
kubectl apply -f cluster-issuer.yaml

 

Commentaires

Connectez-vous pour rejoindre la discussion.

Aucun commentaire pour le moment.