web-dev-qa-db-fra.com

Accès aux services Kubettes dans le cluster de l'extérieur du réseau local - métal nu

Je suis en train d'exécuter une simple envirooment de "haute disponibilité" de métal à nu avec 2 maîtres et 2 travailleurs, ainsi qu'un autre VM avec Haproxy servant d'équilibreur de charge externe.

Ma question est la suivante: il est possible d'accéder aux services (tableau de bord, Ngnix, MySQL (en particulier MySQL), etc ...) de l'extérieur du cluster, les exposant au réseau avec cette configuration que je suis en cours d'exécution?

J'ai essayé d'utiliser Metallb dans cet environnement pour exposer les services en tant que LoadBalancer, mais cela ne semble pas fonctionner, et comme je suis un peu nouveau à Kubernettes, je ne pouvais pas comprendre pourquoi.

Edit: Vous devez travailler maintenant, suivi @ C4F4T0R Suggestion, au lieu d'un équilibreur de charge Haproxy externe, c'est-à-dire VM est devenu un tiers noeud maître et, ainsi que les autres, ils fonctionnent maintenant chacun une instance interne de haproxy et retiré, tandis que le VM qui était utilisé comme étant le fichier LB externe est maintenant un maître d'extrémité pour les autres à rejoindre le cluster, avec METALLB fonctionnant à l'intérieur du cluster avec NGINX Contrôleur d'entrée Amenant les demandes au service qui a été demandée.



>>> Voici les étapes que j'ai suivies pour créer l'envioment ainsi que toute la configuration utilisée dans la configuration.



Configurez un cluster Kubettes hautement disponible à l'aide de Kubeadm

Suivez cette documentation pour configurer un cluster Kubettes hautement disponible en utilisant buntu 20.04 LTS.

Cette documentation vous guide dans la configuration d'un cluster avec deux noeuds maîtres, un noeud ouvrier et un nœud d'équilibreur de charge en utilisant haproxy.

Environnement nu

RôleFqdnIpSystème d'exploitationRAMCPU
Équilibreur de chargementloadbalancer.example.com192.168.44.100Ubuntu 21.041g1
Maîtrekmaster1.example.com10.84.44.51Ubuntu 21.042g2
Maîtrekmacer2.example.com192.168.44.50Ubuntu 21.042g2
Ouvrierkworker1.example.com10.84.44.50Ubuntu 21.042g2
Ouvrierkworker2.example.com192.168.44.51Ubuntu 21.042g2
  • Mot de passe pour le compte root Compte sur toutes ces machines virtuelles est Kubeadmin
  • Effectuez toutes les commandes en tant qu'utilisateur root, sauf indication contraire

Conditions préalables

Si vous voulez essayer cela dans un environnement virtualisé sur votre poste de travail

  • VirtualBox installé
  • La machine hôte a au moins 8 noyaux
  • La machine hôte a au moins 8g de mémoire

Configurer le nœud d'équilibreur de charge

Installer Haproxy
apt update && apt install -y haproxy
Configurer haproxy

Ajouter les lignes ci-dessous à / etc/haproxy/haparroxy.cfg

frontend kubernetes-frontend
    bind 192.168.44.100:6443
    mode tcp
    option tcplog
    default_backend kubernetes-backend

backend kubernetes-backend
    mode tcp
    option tcp-check
    balance roundrobin
    server kmaster1 10.84.44.51:6443 check fall 3 rise 2
    server kmaster2 192.168.44.50:6443 check fall 3 rise 2
Redémarrer le service haproxy
systemctl restart haproxy

Sur tous les nœuds Kubettes (KMASTER1, KMASTER2, Kworker1)

Désactiver le pare-feu
ufw disable
Désactiver le swap
swapoff -a; sed -i '/swap/d' /etc/fstab
Mettre à jour les paramètres SYSCTL pour KubeNettes Networking
cat >>/etc/sysctl.d/kubernetes.conf<<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system
Installer le moteur Docker
{
  apt install -y apt-transport-https ca-certificates curl gnupg-agent software-properties-common
  curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -
  add-apt-repository "deb [Arch=AMD64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
  apt update && apt install -y docker-ce containerd.io
}

Configuration Kubettes

Ajouter un référentiel apt
{
  curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
  echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" > /etc/apt/sources.list.d/kubernetes.list
}
Installer des composants Kubettes
apt update && apt install -y kubeadm=1.19.2-00 kubelet=1.19.2-00 kubectl=1.19.2-00

Sur l'un des nœuds maître Kubettes (par exemple: KMASTER1)

Initialiser le cluster Kubettes
kubeadm init --control-plane-endpoint="192.168.44.100:6443" --upload-certs

Copiez les commandes pour rejoindre d'autres nœuds maîtres et nœuds de travail.

Déployer Calicot réseau (j'utilise tisse au lieu de calico)
kubectl --kubeconfig=/etc/kubernetes/admin.conf create -f https://docs.projectcalico.org/v3.15/manifests/calico.yaml

Rejoignez d'autres nœuds vers le cluster (KMASTER2 & Kworker1)

Utilisez les commandes de jointure Kubeadm respectives que vous avez copiées à partir de la sortie de la commande Kubeadm init sur le premier maître.

IMPORTANT: Vous devez également passer --APISERVER-Adresse de publicité à la commande de jointure lorsque vous rejoignez l'autre nœud maître.

1
ReaperClown

Si vous utilisez metalb, je pense que vous n'avez pas besoin d'avoir une machine virtuelle externe avec Haproxy, vous pouvez installer un contrôleur d'entrée dans KubeNettes et modifier le type de service du contrôleur d'entrée vers Lockbalancer.

Vous aurez maintenant une adresse IP externe dans votre réseau local pour accéder à votre service local via l'IP du contrôleur d'entrée.

(Internet) -> (Router) -> Nat -> Metalb-Ip -> Ingress-controller -> k8s-service
1
c4f4t0r