<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Oracle Cloud on Zwindler's Reflection</title><link>https://blog.zwindler.fr/tags/oracle-cloud/</link><description>Recent content in Oracle Cloud on Zwindler's Reflection</description><generator>Hugo -- gohugo.io</generator><language>fr-fr</language><copyright>Licensed under CC BY-SA 4.0</copyright><lastBuildDate>Tue, 23 May 2023 18:00:00 +0200</lastBuildDate><atom:link href="https://blog.zwindler.fr/tags/oracle-cloud/index.xml" rel="self" type="application/rss+xml"/><item><title>Un cluster Kubernetes gratuit pour vos labs persos ! - part 2</title><link>https://blog.zwindler.fr/2023/05/23/cluster-kubernetes-gratuit-part2/</link><pubDate>Tue, 23 May 2023 18:00:00 +0200</pubDate><guid>https://blog.zwindler.fr/2023/05/23/cluster-kubernetes-gratuit-part2/</guid><description>&lt;img src="https://blog.zwindler.fr/2023/04/kubernetes_banknote.webp" alt="Featured image of post Un cluster Kubernetes gratuit pour vos labs persos ! - part 2" /&gt;&lt;p&gt;Cet article fait partie d&amp;rsquo;une suite d&amp;rsquo;articles sur l&amp;rsquo;installation d&amp;rsquo;un cluster Kubernetes sur le free tier d&amp;rsquo;Oracle Cloud Infrastructure :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.zwindler.fr/2023/04/24/cluster-kubernetes-gratuit-part1/" &gt;Un cluster Kubernetes gratuit pour vos labs persos ! - part 1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.zwindler.fr/2023/05/23/cluster-kubernetes-gratuit-part2/" &gt;Un cluster Kubernetes gratuit pour vos labs persos ! - part 2&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;L&amp;rsquo;avantage principal de ce tuto est qu&amp;rsquo;il est gratuit. L&amp;rsquo;inconvénient est que l&amp;rsquo;installation est relativement longue&amp;hellip;&lt;/p&gt;
&lt;h2 id="résumé-des-épisodes-précédents"&gt;&amp;ldquo;Résumé des épisodes précédents&amp;rdquo;
&lt;/h2&gt;&lt;p&gt;Dans l&amp;rsquo;article précédent (que vous pouvez &lt;a class="link" href="https://blog.zwindler.fr/2023/04/24/cluster-kubernetes-gratuit-part1/" &gt;retrouver ici&lt;/a&gt;), on avait pris en main Oracle Cloud et installé &lt;code&gt;k3s&lt;/code&gt; sur deux machines ARM du free tier.&lt;/p&gt;
&lt;p&gt;A l&amp;rsquo;issue de l&amp;rsquo;article, on avait donc, pour rappel, un cluster Kubernetes fonctionnel avec un master et un worker, mais pas encore accessible ni vraiment utilisable sur Internet.&lt;/p&gt;
&lt;p&gt;Dans cette partie, on va donc finaliser tous les petits bouts qui manquent pour avoir quelque chose de vraiment propre.&lt;/p&gt;
&lt;h2 id="creuse-ton-tunnel"&gt;Creuse ton tunnel
&lt;/h2&gt;&lt;p&gt;Comme je le dis juste avant, on a un cluster fonctionnel. Si je me connecte sur la machine &lt;strong&gt;controlplane&lt;/strong&gt; et que je lance la CLI &lt;code&gt;kubectl&lt;/code&gt;, je pourrais interagir avec mon cluster Kubernetes.&lt;/p&gt;
&lt;p&gt;Cependant, il est très probable que vous vouliez accéder à votre cluster flambant neuf sans avoir à vous connecter préalablement en SSH sur votre machine (enfin moi, c&amp;rsquo;est mon cas).&lt;/p&gt;
&lt;p&gt;Et je n&amp;rsquo;ai pas envie non plus de publier l&amp;rsquo;API server (port 6443) de mon control plane sur Internet (en soi pour du POC, c&amp;rsquo;est faisable, mais ça ne me dit rien, perso).&lt;/p&gt;
&lt;p&gt;Je vais donc monter un VPN &lt;code&gt;wireguard&lt;/code&gt; entre ma machine et mon control plane. Dans un setup plus &amp;ldquo;pro&amp;rdquo;, on montera un bastion dans notre LAN privé du cloud provider pour ça. Ici, pour les besoins de l&amp;rsquo;article, je me contente de monter le peer directement entre le node &lt;strong&gt;controlplane&lt;/strong&gt; et mon PC.&lt;/p&gt;
&lt;p&gt;J&amp;rsquo;installe d&amp;rsquo;abord wireguard sur les deux machines, et je génère un couple clé publique/privée :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ sudo apt install wireguard
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ sudo -i
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ &lt;span class="nb"&gt;cd&lt;/span&gt; /etc/wireguard/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ &lt;span class="nb"&gt;umask&lt;/span&gt; 077&lt;span class="p"&gt;;&lt;/span&gt; wg genkey &lt;span class="p"&gt;|&lt;/span&gt; tee private.key &lt;span class="p"&gt;|&lt;/span&gt; wg pubkey &amp;gt; public.key
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ &lt;span class="nb"&gt;exit&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Récupérez le contenu de la clé publique de chaque machine, ainsi que leur IP publique.&lt;/p&gt;
&lt;p&gt;Note : pour trouver rapidement l&amp;rsquo;IP publique de chez vous, vous pouvez utiliser des services comme &lt;code&gt;dig +short myip.opendns.com @resolver1.opendns.com&lt;/code&gt;, &lt;code&gt;curl http://4.ifcfg.me&lt;/code&gt; ou équivalent&lt;/p&gt;
&lt;p&gt;Ensuite, je vais créer un fichier de configuration &lt;code&gt;/etc/wireguard/oci0.conf&lt;/code&gt; sur mon pc. Dans mon cas, l&amp;rsquo;interface réseau s&amp;rsquo;appelle &lt;strong&gt;enp8s0&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ sudo -i
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ &lt;span class="nv"&gt;PEER_IP&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;IP.PUBLIQUE.DU.CONTROLPLANE
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ &lt;span class="nv"&gt;PEER_PUBLIC_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;CLE.PUBLIQUE.DE.VOTRE.CONTROLPLANE
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ cat &amp;gt; /etc/wireguard/oci0.conf &lt;span class="s"&gt;&amp;lt;&amp;lt; EOF
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;[Interface]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;Address = 10.10.10.1/24
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;ListenPort = 55555
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;PrivateKey = `cat /etc/wireguard/private.key`
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;[Peer]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;PublicKey = ${PEER_PUBLIC_KEY}
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;AllowedIPs = 10.10.10.2/32,10.0.0.0/24
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;Endpoint = ${PEER_IP}:55555
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;EOF&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ &lt;span class="nb"&gt;exit&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ wg-quick up oci0
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Et on fait pareil sur le node &lt;strong&gt;controlplane&lt;/strong&gt; (son interface réseau s&amp;rsquo;appelle &lt;code&gt;enp0s6&lt;/code&gt; dans mon cas).&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ sudo -i
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ &lt;span class="nv"&gt;PEER_IP&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;IP.PUBLIQUE.DU.PC
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ &lt;span class="nv"&gt;PEER_PUBLIC_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;CLE.PUBLIQUE.DE.VOTRE.PC
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ cat &amp;gt; /etc/wireguard/oci0.conf &lt;span class="s"&gt;&amp;lt;&amp;lt; EOF
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;[Interface]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;Address = 10.10.10.2/24
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;ListenPort = 55555
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;PrivateKey = `cat /etc/wireguard/private.key`
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;[Peer]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;PublicKey = ${PEER_PUBLIC_KEY}
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;AllowedIPs = 10.10.10.1/32
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;Endpoint = ${PEER_IP}:55555
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;EOF&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ &lt;span class="nb"&gt;exit&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ wg-quick up oci0
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Comme les machines OCI disposent toutes d&amp;rsquo;un pare-feu &lt;code&gt;iptables&lt;/code&gt; et aussi d&amp;rsquo;un pare-feu au niveau du réseau virtuel, on doit ouvrir les ports côté &lt;strong&gt;controlplane&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# allow wireguard access from your own public IP address&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ iptables -I INPUT -s IP.PUBLIQUE.DU.PC -p udp --dport &lt;span class="m"&gt;55555&lt;/span&gt; -j ACCEPT
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# save rules&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ sudo netfilter-persistent save
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Et&lt;/strong&gt; côté console Oracle Cloud (Security list dans l&amp;rsquo;administration du VCN, &lt;a class="link" href="https://blog.zwindler.fr/2023/04/24/cluster-kubernetes-gratuit-part1/#ouverture-des-ports-internes" &gt;je vous renvoie au précédent post où je détaille comment faire&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2023/05/VCN_udp_55555.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;A partir de maintenant, votre PC à l&amp;rsquo;IP 10.10.10.1 et votre control plane l&amp;rsquo;IP 10.10.10.2. Les deux doivent pouvoir se pinger :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ ping 10.10.10.1
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ ping 10.10.10.2
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;On devrait aussi pouvoir ping l&amp;rsquo;IP privée (interne) de notre &lt;strong&gt;controlplane&lt;/strong&gt; depuis notre pc&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ ping 10.0.0.xxx
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Si wireguard vous intéresse, il existe énormément de documentation sur Internet à ce sujet, à commencer par le &lt;a class="link" href="https://www.wireguard.com/quickstart/" target="_blank" rel="noopener"
&gt;site officiel&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="accéder-au-cluster-depuis-votre-poste"&gt;Accéder au cluster depuis votre poste
&lt;/h2&gt;&lt;p&gt;On a maintenant un tunnel pour discuter de notre PC vers notre control plane Kubernetes, mais toujours pas la possibilité de discuter avec Kubernetes. Il reste encore une règle &lt;code&gt;iptables&lt;/code&gt; à ajouter 😭.&lt;/p&gt;
&lt;p&gt;Pour s&amp;rsquo;en convaincre, on tente de voir si le port répond depuis notre PC :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ nc -zv 10.10.10.2 &lt;span class="m"&gt;6443&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;nc: connect to 10.10.10.2 port &lt;span class="m"&gt;6443&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;tcp&lt;span class="o"&gt;)&lt;/span&gt; failed: No route to host
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ nc -zv 10.0.0.xxx &lt;span class="m"&gt;6443&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;nc: connect to 10.0.0.xxx port &lt;span class="m"&gt;6443&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;tcp&lt;span class="o"&gt;)&lt;/span&gt; failed: No route to host
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Côté &lt;strong&gt;controlplane&lt;/strong&gt;, on va donc autoriser le traffic provenant de wireguard (interface &lt;code&gt;oci0&lt;/code&gt;) à se connecter à l&amp;rsquo;API server&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# allow access to apiserver from wireguard interface&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ sudo iptables -I INPUT -i oci0 -p tcp --dport &lt;span class="m"&gt;6443&lt;/span&gt; -j ACCEPT
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# save rules&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ sudo netfilter-persistent save
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Et maintenant, depuis notre PC :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ nc -zv 10.10.10.2 &lt;span class="m"&gt;6443&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Connection to 10.10.10.2 &lt;span class="m"&gt;6443&lt;/span&gt; port &lt;span class="o"&gt;[&lt;/span&gt;tcp/*&lt;span class="o"&gt;]&lt;/span&gt; succeeded!
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ nc -zv 10.0.0.xxx &lt;span class="m"&gt;6443&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Connection to 10.0.0.34 &lt;span class="m"&gt;6443&lt;/span&gt; port &lt;span class="o"&gt;[&lt;/span&gt;tcp/*&lt;span class="o"&gt;]&lt;/span&gt; succeeded!
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Récupérez le contenu du fichier &lt;code&gt;/etc/rancher/k3s/k3s.yaml&lt;/code&gt; sur le serveur &lt;strong&gt;controlplane&lt;/strong&gt;.
Créez un fichier &lt;code&gt;k3s.yaml&lt;/code&gt; sur votre machine et remplacez la valeur &lt;code&gt;server: https://127.0.0.1:6443&lt;/code&gt; par &lt;code&gt;server: https://10.10.10.2:6443&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Vous devriez maintenant avoir accès à votre cluster depuis votre PC !&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ &lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;KUBECONFIG&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;k3s.yaml
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ kubectl get pods --all-namespaces
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;NAMESPACE NAME READY STATUS RESTARTS AGE
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kube-system helm-install-traefik-crd-xdg7s 0/1 Completed &lt;span class="m"&gt;0&lt;/span&gt; 29d
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kube-system helm-install-traefik-ncqzm 0/1 Completed &lt;span class="m"&gt;1&lt;/span&gt; 29d
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kube-system svclb-traefik-084208f2-dcsqr 2/2 Running &lt;span class="m"&gt;0&lt;/span&gt; 29d
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kube-system local-path-provisioner-5d56847996-x76zx 1/1 Running &lt;span class="m"&gt;5&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;29d ago&lt;span class="o"&gt;)&lt;/span&gt; 29d
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kube-system svclb-traefik-084208f2-zw6bv 2/2 Running &lt;span class="m"&gt;7&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;29d ago&lt;span class="o"&gt;)&lt;/span&gt; 29d
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kube-system coredns-7c444649cb-gg22s 1/1 Running &lt;span class="m"&gt;3&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;29d ago&lt;span class="o"&gt;)&lt;/span&gt; 29d
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kube-system metrics-server-7b67f64457-r5c5n 1/1 Running &lt;span class="m"&gt;5&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;29d ago&lt;span class="o"&gt;)&lt;/span&gt; 29d
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kube-system traefik-56b8c5fb5c-px5pc 1/1 Running &lt;span class="m"&gt;3&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;29d ago&lt;span class="o"&gt;)&lt;/span&gt; 29d
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="ouverture-des-ports-pour-traefik"&gt;Ouverture des ports pour Traefik
&lt;/h2&gt;&lt;p&gt;On peut maintenant interagir avec Kubernetes, mais on ne peut toujours pas en faire grand-chose. Je suis certain que vous allez déployer des applications web sur votre cluster et c&amp;rsquo;est quand même plus cool d&amp;rsquo;y accéder &lt;em&gt;depuis&lt;/em&gt; Internet :-p.&lt;/p&gt;
&lt;p&gt;Par défaut, &lt;code&gt;k3s&lt;/code&gt; installe l&amp;rsquo;IngressController &lt;code&gt;traefik&lt;/code&gt;. Vous l&amp;rsquo;avez deviné&amp;hellip; on va devoir ouvrir des flux !&lt;/p&gt;
&lt;p&gt;Si vous regardez sur quels IPs/ports traefik est disponible sur votre cluster, vous remarquerez que Traefik utilise un service de type &lt;strong&gt;LoadBalancer&lt;/strong&gt;, directement accessible sur l&amp;rsquo;IP privée de vos machines (10.0.0.x et 10.0.0.y dans cet exemple)&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl -n kube-system get svc traefik
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;NAME TYPE CLUSTER-IP EXTERNAL-IP PORT&lt;span class="o"&gt;(&lt;/span&gt;S&lt;span class="o"&gt;)&lt;/span&gt; AGE
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;traefik LoadBalancer 10.43.44.139 10.0.0.xxx,10.0.0.yyy 80:30614/TCP,443:30839/TCP 42m
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Dans OCI, ça sera pratique, on va pouvoir attaquer directement le port 80/443 de nos serveurs et avoir l&amp;rsquo;IngressController au bout du fil.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;$ curl http://10.0.0.xxx
404 page not found
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Ne vous laissez pas tromper par l&amp;rsquo;erreur 404. Le fait qu&amp;rsquo;on nous réponde une erreur 404 prouve que traefik répond bien !&lt;/p&gt;
&lt;p&gt;Sur les DEUX machines (control plane ET worker), on va autoriser l&amp;rsquo;accès au port 80 depuis partout :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;# allow access to HTTP 80 from everywhere
$ sudo iptables -I INPUT -p tcp --dport 80 -j ACCEPT
# save rules
$ sudo netfilter-persistent save
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Mais on va probablement vouloir exposer ça sur Internet et les IP privées sont&amp;hellip; privées. On va donc créer un load balancer en frontal, ça nous permettra de diriger le trafic sur tous les noeuds du cluster, pas juste un seul (ça ferait un SPOF en plus).&lt;/p&gt;
&lt;h2 id="créer-un-loadbalancer"&gt;Créer un Loadbalancer
&lt;/h2&gt;&lt;p&gt;Dans l&amp;rsquo;onglet Networking, on va sélectionner Loadbalancer (&lt;a class="link" href="https://cloud.oracle.com/load-balancer/load-balancers?region=eu-paris-1" target="_blank" rel="noopener"
&gt;ici&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2023/05/oci_lb.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Suivez le wizard, choisissez un Load balancer (L7)&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2023/05/oci_lb2.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Puis donnez-lui un petit nom (kube-traefik-lb par exemple), laissez Public (choix par défaut), sélectionnez votre VCN et votre subnet.&lt;/p&gt;
&lt;p&gt;Au moment de choisir les &amp;ldquo;backends&amp;rdquo;, cliquez sur &amp;ldquo;Add backends&amp;rdquo; et ajoutez vos 2 machines (c&amp;rsquo;est Kubernetes et flannel qui se chargent de rediriger les requêtes au bon endroit)&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2023/05/oci_add_backends.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Laissez le port 80 par défaut, puisqu&amp;rsquo;on vient de vérifier que ces ports répondent bien à &lt;code&gt;curl http://10.0.0.xxx&lt;/code&gt; (pas besoin d&amp;rsquo;utiliser le NodePort, pour ceux qui savent de quoi je parle). Laissez aussi les paramètres par défaut pour la &amp;ldquo;health check policy&amp;rdquo;, SAUF pour le code retour attendu (puisque notre traefik renvoie 404 si aucun Ingress ne matche l&amp;rsquo;&amp;ldquo;host&amp;rdquo; envoyé par la requête).&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2023/05/oci_healthcheck.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Dans la page d&amp;rsquo;après dans &amp;ldquo;configure Listener&amp;rdquo;, si vous avez un certificat TLS valide, vous pouvez l&amp;rsquo;intégrer au loadbalancer avec l&amp;rsquo;option &amp;ldquo;Load balancer managed certificate&amp;rdquo; dans le cadre &amp;ldquo;SSL certificate&amp;rdquo;. Vous pouvez aussi &lt;a class="link" href="https://cloud.oracle.com/security/certificates/certificate?region=eu-paris-1" target="_blank" rel="noopener"
&gt;gérer les certificats depuis Oracle Cloud Infrastructure&lt;/a&gt;. Je n&amp;rsquo;ai pas exploré cette option mais c&amp;rsquo;est très standard chez les cloud providers.&lt;/p&gt;
&lt;p&gt;Sinon, cliquez sur &amp;ldquo;HTTP&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Une fois le LoadBalancer créé, il devrait devenir &amp;ldquo;vert&amp;rdquo; et vous pourrez récupérer son adresse IP publique pour y accéder.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2023/05/oci-lb-green.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;h2 id="conclusion"&gt;Conclusion
&lt;/h2&gt;&lt;p&gt;Vous êtes arrivés jusque-là. Bravo !&lt;/p&gt;
&lt;p&gt;Vous pouvez déployer des applications web avec des Ingress et faire pointer vos enregistrements DNS sur l&amp;rsquo;IP du LoadBalancer. Les requêtes HTTP seront correctement routées sur un des deux serveurs Kubernetes, puis vers Traefik, puis vers votre appli.&lt;/p&gt;
&lt;p&gt;J&amp;rsquo;ai fait le test avec une image Docker personnelle (utilisée pour mon dernier talk) et ça a marché :-).&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2023/05/oci_result.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;On a fait plus d&amp;rsquo;iptables que de Kubernetes mais bon c&amp;rsquo;est pas très grave 😅. Ca aura été une excuse pour tester le free tier d&amp;rsquo;Oracle et de tester un peu le fonctionnement de ce cloud provider assez peu connu en France (je trouve).&lt;/p&gt;
&lt;h2 id="autres-blogs-posts-utiles"&gt;Autres blogs posts utiles
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://medium.com/oracledevs/k3s-on-oci-a-kubernetes-cluster-in-under-5-mins-d7c194c19d59" target="_blank" rel="noopener"
&gt;medium.com/oracledevs - k3s-on-oci-a-kubernetes-cluster-in-under-5-mins&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://dev.to/armiedema/opening-up-port-80-and-443-for-oracle-cloud-servers-j35" target="_blank" rel="noopener"
&gt;dev.to/armiedema - opening-up-port-80-and-443-for-oracle-cloud-servers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://www.malekal.com/utiliser-wg-quick-wireguard/" target="_blank" rel="noopener"
&gt;malekal.com - utiliser-wg-quick-wireguard&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Un cluster Kubernetes gratuit pour vos labs persos ! - part 1</title><link>https://blog.zwindler.fr/2023/04/24/cluster-kubernetes-gratuit-part1/</link><pubDate>Mon, 24 Apr 2023 06:00:00 +0200</pubDate><guid>https://blog.zwindler.fr/2023/04/24/cluster-kubernetes-gratuit-part1/</guid><description>&lt;img src="https://blog.zwindler.fr/2023/04/kubernetes_banknote.webp" alt="Featured image of post Un cluster Kubernetes gratuit pour vos labs persos ! - part 1" /&gt;&lt;p&gt;Cet article fait partie d&amp;rsquo;une suite d&amp;rsquo;articles sur l&amp;rsquo;installation d&amp;rsquo;un cluster Kubernetes sur le free tier d&amp;rsquo;Oracle Cloud Infrastructure :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.zwindler.fr/2023/04/24/cluster-kubernetes-gratuit-part1/" &gt;Un cluster Kubernetes gratuit pour vos labs persos ! - part 1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.zwindler.fr/2023/05/23/cluster-kubernetes-gratuit-part2/" &gt;Un cluster Kubernetes gratuit pour vos labs persos ! - part 2&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;L&amp;rsquo;avantage principal de ce tuto est qu&amp;rsquo;il est gratuit. L&amp;rsquo;inconvénient est que l&amp;rsquo;installation est relativement longue&amp;hellip;&lt;/p&gt;
&lt;h2 id="le-titre-le-plus-clickbait-du-blog"&gt;Le titre le plus clickbait du blog
&lt;/h2&gt;&lt;p&gt;Je me suis bien marré en écrivant ce titre &amp;ldquo;accrocheur&amp;rdquo; (pour rester poli). Pour autant, il n&amp;rsquo;est pas vraiment faux.&lt;/p&gt;
&lt;p&gt;Évidemment, dans la vie capitaliste dans laquelle nous vivons, rien n&amp;rsquo;est jamais vraiment gratuit. Là en l&amp;rsquo;occurrence, je vais vous guider pour créer un cluster Kubernetes qui ne vous coutera rien &lt;em&gt;personnellement&lt;/em&gt;, il sera juste payé avec nos audits Oracle(*).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;En revanche, ça va nous demander pas mal de taf&lt;/strong&gt;. On va utiliser plusieurs services d&amp;rsquo;Oracle Cloud Infrastructure, &lt;code&gt;k3s&lt;/code&gt;, &lt;code&gt;traefik&lt;/code&gt;, on va jouer avec le kubeconfig, &amp;hellip; Bref, ya du boulot, et c&amp;rsquo;est même trop long pour un seul article !&lt;/p&gt;
&lt;p&gt;(*) Pour ceux qui n&amp;rsquo;ont pas la vanne, Oracle est historiquement connue pour sa politique tarifaire assassine (vive le vendor lock !), pour sa propension à changer les règles de licensing tous les ans, et le tout associé à des audits forcés (relativement scandaleux) chez les clients pour leur soutirer toujours un peu plus de thunes. Aaaah, c&amp;rsquo;était la bonne époque.&lt;/p&gt;
&lt;h2 id="en-route-vers-le-free-tier-de-chez-oracle-cloud-infrastructure"&gt;En route vers le &amp;ldquo;free tier&amp;rdquo; de chez Oracle Cloud Infrastructure
&lt;/h2&gt;&lt;p&gt;Si je vous parle de cloud providers mondiaux américains, je suis sûr que vous allez penser AWS, Azure ou GCP. Les plus old school d&amp;rsquo;entre vous penseront peut-être à des providers comme IBM Cloud, les plus internationaux d&amp;rsquo;entre vous penseront peut-être à Alibaba cloud.&lt;/p&gt;
&lt;p&gt;Mais qui a déjà testé Oracle Cloud Infrastructure (OCI) ? Car oui, Oracle fait du cloud, pas seulement des bases de données et des audits chez leurs clients.&lt;/p&gt;
&lt;p&gt;C&amp;rsquo;est même un gros provider, très souvent cité dans la liste des &amp;ldquo;top 5 cloud providers&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Note : je n&amp;rsquo;ai pas du tout été vérifié les parts de marchés, peut être qu&amp;rsquo;Alibaba fait beaucoup plus, je parle juste en termes de résultats sur un moteur de recherche.&lt;/p&gt;
&lt;p&gt;Ca fait des années que j&amp;rsquo;hésite à tester OCI car ils ont un free tier qui jusqu&amp;rsquo;à présent était plutôt correct et qu&amp;rsquo;ils ont &lt;em&gt;a priori&lt;/em&gt; un rapport performance/prix bien meilleur que les 4 autres &amp;ldquo;gros&amp;rdquo; cloud providers.&lt;/p&gt;
&lt;p&gt;Depuis quelques années, ils ont aussi décidé de miser une pièce (comme d&amp;rsquo;autres) sur l&amp;rsquo;ARM&amp;hellip; J&amp;rsquo;en dis pas plus pour l&amp;rsquo;instant.&lt;/p&gt;
&lt;h2 id="on-se-crée-un-compte-dessai"&gt;On se crée un compte d&amp;rsquo;essai
&lt;/h2&gt;&lt;p&gt;Comme la plupart des clouds providers, on appâte le chaland avec un essai gratuit en plus de free tier. Chez OCI, c&amp;rsquo;est 300$ pour 30 jours d&amp;rsquo;essai (c&amp;rsquo;est un peu court mais il n&amp;rsquo;y a que GCP à ma connaissance qui donne plus).&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2023/04/oci_free_tier.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;En échange de cet essai gratuit, il va falloir rentrer des informations personnelles et une carte de crédit valide (comme chez tous les autres).&lt;/p&gt;
&lt;p&gt;Oracle &amp;ldquo;garanti&amp;rdquo; cependant que tant que vous resterez sur le compte d&amp;rsquo;essai (que vous ne faites pas l&amp;rsquo;action de &amp;ldquo;mettre à niveau&amp;rdquo; votre compte), vous resterez sur un compte gratuit et vous ne serez jamais débité. Faites quand même un peu gaffe&amp;hellip;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://signup.cloud.oracle.com/" target="_blank" rel="noopener"
&gt;Lien d&amp;rsquo;inscription Oracle Cloud&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://www.oracle.com/cloud/free/faq/" target="_blank" rel="noopener"
&gt;FAQ Oracle Cloud&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="une-fois-le-compte-créé"&gt;Une fois le compte créé
&lt;/h2&gt;&lt;p&gt;La création du compte elle-même prend un peu de temps. On peut s&amp;rsquo;y connecter au bout de quelques minutes mais tout n&amp;rsquo;est pas encore finalisé. Dans mon cas tout était vraiment opérationnel au bout d&amp;rsquo;une demi-heure environ, soyez donc un peu patients&amp;hellip;&lt;/p&gt;
&lt;p&gt;Petite subtilité, on vous demandera de créer un &lt;strong&gt;tenant&lt;/strong&gt; aussi appelé parfois &lt;strong&gt;Cloud Account Name&lt;/strong&gt; (&lt;em&gt;zwindlercorp&lt;/em&gt; par exemple) puis de vous connecter avec un email. C&amp;rsquo;est la manière pour Oracle de gérer le multi-utilisateurs sur leur plateforme.&lt;/p&gt;
&lt;p&gt;Une fois connecté à la console, on peut commencer à faire joujou. La première chose qu&amp;rsquo;on va devoir faire est de se placer dans un &amp;ldquo;Compartment&amp;rdquo;. Je n&amp;rsquo;ai pas creusé en détail cette fonctionnalité, pour faire simple on va se placer à la racine de notre &amp;ldquo;tenant&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2023/04/tenant.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Puis, on va créer un &lt;strong&gt;VCN&lt;/strong&gt; pour Virtual Cloud Networks, qui va être notre gros réseau privé virtuel dans tout notre tenant Oracle Cloud.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://cloud.oracle.com/networking/vcns?region=eu-paris-1" target="_blank" rel="noopener"
&gt;cloud.oracle.com/networking/vcns&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;J&amp;rsquo;ai utilisé le &lt;strong&gt;VNC Wizard&lt;/strong&gt;, j&amp;rsquo;ai cliqué sur &amp;ldquo;Create VCN with Internet Connectivity&amp;rdquo; (l&amp;rsquo;option par défaut) et j&amp;rsquo;ai juste donné un nom &amp;ldquo;vcn1&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Une fois que c&amp;rsquo;est terminé, on peut commencer à créer nos machines&amp;hellip;&lt;/p&gt;
&lt;h2 id="ampere"&gt;Ampere
&lt;/h2&gt;&lt;p&gt;Je le disais en introduction, Oracle Cloud Infrastructure a misé en partie sur des infrastructures ARM. Et pour nous donner envie de tester, à mis en place un &lt;em&gt;free tier&lt;/em&gt; plus qu&amp;rsquo;alléchant pour un lab perso :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Each tenancy gets the first 3,000 OCPU hours and 18,000 GB hours per month for free to create Ampere A1 Compute instances using the VM.Standard.A1.Flex shape (equivalent to 4 OCPUs and 24 GB of memory). Each tenancy also gets two VM.Standard.E2.1.Micro instances for free.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Je passe sur les 2 instances E2.1.Micro (qui sont des VMs 1 cpu / 1 Go de RAM en x86 classique) pour parler plus en détail de la partie Ampere.&lt;/p&gt;
&lt;p&gt;Oui, vous avez bien lu, on a le droit d&amp;rsquo;utiliser &lt;strong&gt;4 OCPUs et 24 Go de RAM gratuitement&lt;/strong&gt;. Et le mieux dans tout ça, c&amp;rsquo;est qu&amp;rsquo;on peut le répartir entre plusieurs machines (par tranches de 1 OCPU / 6 Go de RAM) !&lt;/p&gt;
&lt;p&gt;Je ne sais pas vous, mais moi j&amp;rsquo;ai eu des labs avec bien moins de ressources que ça !&lt;/p&gt;
&lt;h2 id="compute"&gt;Compute
&lt;/h2&gt;&lt;p&gt;On va donc créer pour notre cluster Kubernetes 2 machines Ampere de 2 OCPUs et 12 Go de RAM. L&amp;rsquo;une sera notre control plane, l&amp;rsquo;autre notre worker.&lt;/p&gt;
&lt;p&gt;Note : rien ne vous oblige à faire le même setup. Vous pouvez faire 4 machines de 1 OCPU / 6 Go de RAM, une de 1/6 et une de 3/18, etc.
Note 2 : pour la petite histoire, c&amp;rsquo;est sur ce type de machine que j&amp;rsquo;ai fait la démo dans mon talk &lt;a class="link" href="https://blog.zwindler.fr/2023/04/14/devoxx-2023-recap-jour-2/" target="_blank" rel="noopener"
&gt;&amp;ldquo;Démystifions le comportement interne de Kubernetes&amp;rdquo; à DevoxxFR 2023&lt;/a&gt; et ça a très bien marché ;-P.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://cloud.oracle.com/compute/images?region=eu-paris-1" target="_blank" rel="noopener"
&gt;cloud.oracle.com/compute/images&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;On prendra soin de changer l&amp;rsquo;OS (j&amp;rsquo;utilise une Ubuntu 22.04 classique, mais en vrai vous pouvez en utiliser d&amp;rsquo;autres) et la &amp;ldquo;shape&amp;rdquo; :&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2023/04/ampere.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Dans la partie Networking, il va falloir cliquer sur &amp;ldquo;Edit&amp;rdquo; sinon la machine ne pourra pas se créer. On va affecter la machine à notre VCN qu&amp;rsquo;on vient de créer plus haut juste en cliquant sur &amp;ldquo;Edit&amp;rdquo; (les valeurs se remplissent par défaut).&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2023/04/machine_vcn.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Pour terminer, n&amp;rsquo;oubliez pas d&amp;rsquo;ajouter une clé SSH sans quoi vous ne pourrez pas vous connecter sur vos machines&amp;hellip;&lt;/p&gt;
&lt;p&gt;Je crée donc 2 machines avec ces informations, une qui s&amp;rsquo;appelle &lt;strong&gt;controlplane&lt;/strong&gt; et l&amp;rsquo;autre qui s&amp;rsquo;appelle &lt;strong&gt;worker&lt;/strong&gt;. Au bout de quelques minutes, les machines sont accessibles.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2023/04/instances.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Récupérez et mettez de côté les IPs privées / publiques de chaques machines.&lt;/p&gt;
&lt;h2 id="ouverture-des-ports-internes"&gt;Ouverture des ports internes
&lt;/h2&gt;&lt;p&gt;Contrairement à d&amp;rsquo;autres cloud providers, les firewalls sont configurés (plutôt bien d&amp;rsquo;ailleurs) par défaut sur toutes les images OCI disponibles.&lt;/p&gt;
&lt;p&gt;Si vous essayez d&amp;rsquo;installer Kubernetes sur une de ces machines, il est probable que l&amp;rsquo;installation échouera car les flux (même internes) seront bloqués.&lt;/p&gt;
&lt;p&gt;On va devoir se connecter sur nos machines pour autoriser explicitement certains flux. Pour voir comment c&amp;rsquo;est configuré par défaut, vous pouvez aller voir le contenu du fichier rules.v4 :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cat /etc/iptables/rules.v4
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# CLOUD_IMG: This file was created/modified by the Cloud Image build process&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# iptables configuration for Oracle Cloud Infrastructure&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;...&lt;span class="o"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Voici la liste des choses qu&amp;rsquo;on va devoir ouvrir :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;l&amp;rsquo;accès pour 10.42.0.0/16 (CIDR des pods) et 10.43.0.1/16 (CIDR des services)&lt;/li&gt;
&lt;li&gt;l&amp;rsquo;accès au control plane / port 6443 sur tout le LAN privé&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Sur le control plane, lancez les commandes suivantes (remplacez YOUR.OWN.IP.ADDRESS par les bonnes valeurs) :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# allow flannel traffic from/to 10.42.0.0/16 (pods) and 10.43.0.0/16 (services)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo iptables -I INPUT -s 10.42.0.0/15 -j ACCEPT
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo iptables -I FORWARD -o cni0 -j ACCEPT
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo iptables -I FORWARD -o flannel.1 -j ACCEPT
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo iptables -I FORWARD -i flannel.1 -j ACCEPT
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo iptables -I OUTPUT -o cni0 -j ACCEPT
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo iptables -I OUTPUT -o flannel.1 -j ACCEPT
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo iptables -I OUTPUT -d 10.42.0.0/15 -j ACCEPT
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Allow api access to private lan&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo iptables -I INPUT -p tcp -s 10.0.0.0/24 --dport &lt;span class="m"&gt;6443&lt;/span&gt; -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# save rules&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo netfilter-persistent save
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Sur le worker, lancez les mêmes commandes mais dans la partie &amp;ldquo;Allow api access to private lan&amp;rdquo;.&lt;/p&gt;
&lt;h2 id="ouverture-des-ports-côté-vcn"&gt;Ouverture des ports côté VCN
&lt;/h2&gt;&lt;p&gt;En plus de devoir configurer les firewalls côté OS, on va aussi devoir autoriser les flux internes sur le VCN. Dans la liste des VCN, cliquez sur le subnet &amp;ldquo;public&amp;rdquo;, puis sur &amp;ldquo;Default Security List for vcn1&amp;rdquo; tout en bas.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2023/04/default_security_list.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;On tombe sur un tableau de tous les flux autorisés sur ce VCN (Ingress et Egress). Cliquez sur &amp;ldquo;Add Ingress Rules&amp;rdquo; pour en ajouter une nouvelle.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2023/04/add_ingress_rule.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;On va d&amp;rsquo;abord devoir explicitement ajouter des règles pour permettre à nos machines de se parler entre elles. Pour faire simple dans ce tutoriel, j&amp;rsquo;ai autorisé tout le traffic sur le lan &lt;strong&gt;10.0.0.0/16&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Pour un lab, c&amp;rsquo;est largement suffisant. Dans un contexte de production, on voudra par contre explicitement autoriser les flux un à un. Vous pouvez trouver une liste des flux à ouvrir via &lt;a class="link" href="https://docs.k3s.io/installation/requirements#inbound-rules-for-k3s-server-nodes" target="_blank" rel="noopener"
&gt;la page de documentation de k3s&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="installation-de-kubernetes"&gt;Installation de Kubernetes
&lt;/h2&gt;&lt;p&gt;Pour aller plus vite dans ce tuto, je voulais utiliser l&amp;rsquo;outil &lt;a class="link" href="https://github.com/alexellis/k3sup" target="_blank" rel="noopener"
&gt;k3sup d&amp;rsquo;Alex Ellis&lt;/a&gt; (aussi founder d&amp;rsquo;OpenFaaS), mais j&amp;rsquo;ai eu du mal à faire comprendre à l&amp;rsquo;outil que je voulais utiliser les IP publiques pour me connecter en SSH, et les IP privées pour les connexions vers l&amp;rsquo;API server.&lt;/p&gt;
&lt;p&gt;Je vais donc utiliser &lt;code&gt;k3s&lt;/code&gt; directement, en me connectant en SSH sur les machines directement.&lt;/p&gt;
&lt;p&gt;Sur le node controlplane :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -sfL https://get.k3s.io &lt;span class="p"&gt;|&lt;/span&gt; sh -
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;k3s&lt;/code&gt; devrait s&amp;rsquo;installer en quelques secondes. Récupérez le contenu du fichier &lt;code&gt;/var/lib/rancher/k3s/server/node-token&lt;/code&gt; qui contient le token pour ajouter des nodes.&lt;/p&gt;
&lt;p&gt;On installe ensuite le node worker :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;CONTROLPLANE_PRIVATE_IP=x.x.x.x
curl -sfL https://get.k3s.io | K3S_URL=https://${CONTROLPLANE_PRIVATE_IP}:6443 K3S_TOKEN=valeur-du-fichier-node-token sh -
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Au bout de quelques minutes (une seule devrait suffire, en vrai), vous devriez pouvoir commencer à accéder à votre cluster depuis le serveur controlplane&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;root@controlplane:~# kubectl get nodes
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;NAME STATUS ROLES AGE VERSION
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;worker Ready &amp;lt;none&amp;gt; 35m v1.26.3+k3s1
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;controlplane Ready control-plane,master 39m v1.26.3+k3s1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Tadaaaaa 🎉🎉&lt;/p&gt;
&lt;h2 id="is-this-the-end"&gt;Is this the end?
&lt;/h2&gt;&lt;p&gt;En vrai, il reste encore pas mal de taf (récupérer le kubeconfig pour notre poste, ouvrir les flux pour traefik, &amp;hellip;) pour que notre cluster soit vraiment opérationnel et l&amp;rsquo;article est déjà assez long (11000 signes)&amp;hellip;&lt;/p&gt;
&lt;p&gt;Ca va mériter une &amp;ldquo;part2&amp;rdquo; ultérieure ;-P.&lt;/p&gt;
&lt;p&gt;Edit : &lt;a class="link" href="https://blog.zwindler.fr/2023/05/23/cluster-kubernetes-gratuit-part2/" &gt;la suite est ici&lt;/a&gt;&lt;/p&gt;</description></item></channel></rss>