Exposer les services Geocore
Contour et son proxy Envoy exposent l’API Geocore et Centui en HTTP(S). Envoy traduit les appels gRPC-Web de Centui en requêtes gRPC pour l’API. MQTT et NTP ne passent pas par Contour : conservez leur configuration NodePort décrite dans le guide k0s. Consultez Exposition des services pour tous les choix d’exposition.
Contour est nécessaire pour le chemin d’accès Geocore documenté. Le chart geocore-ingress-contour crée uniquement les routes Geocore ; il n’installe ni Contour ni Envoy. Conservez les services API Geocore et Centui dans leur type ClusterIP par défaut.
Les images Contour et Envoy sont hébergées dans Centiloc Harbor. Créez l’espace de noms contour, puis créez dans celui-ci un secret de registre Docker :
kubectl create namespace contour
kubectl create secret docker-registry harbor-regcred \
--namespace contour \
--docker-server=harbor.centiloc.com \
--docker-username=<username> \
--docker-password=<password> \
--docker-email=<email>
Le secret est limité à l’espace de noms : il doit être créé avant l’installation de Contour et est distinct des identifiants utilisés par Helm pour télécharger les charts.
Utilisez cette option lorsque la plateforme Kubernetes, ou MetalLB, fournit une adresse LoadBalancer :
helm install contour oci://harbor.centiloc.com/bitnamicharts/contour \
--namespace contour \
--version 21.1.4 \
--set contour.certgen.certificateLifetime=2190 \
--set 'global.imagePullSecrets[0]=harbor-regcred'
Utilisez cette option pour une installation sur un nœud unique, en HTTP non chiffré. Envoy est exposé sur le NodePort 30180 :
helm install contour oci://harbor.centiloc.com/bitnamicharts/contour \
--namespace contour \
--version 21.1.4 \
--set contour.certgen.certificateLifetime=2190 \
--set 'global.imagePullSecrets[0]=harbor-regcred' \
--set envoy.service.type="NodePort" \
--set envoy.service.nodePorts.http="30180"
Proxy gRPC-Web alternatifUn proxy alternatif, tel quegrpcwebproxy, peut être utilisé à la place de Contour et degeocore-ingress-contour. Son installation et sa configuration ne sont pas couvertes ici.
Envoy peut publier l’API et Centui en HTTP non chiffré ou avec terminaison TLS. Le choix doit correspondre aux valeurs core.geo.tlsEnabled et core.centui.tlsEnabled définies dans le guide k0s.
| Transport Ingress | core.geo.tlsEnabled et core.centui.tlsEnabled |
tlsEnabled du chart de routage |
|---|---|---|
| HTTP non chiffré | false |
false |
| TLS | true |
true |
Ne poursuivez avec les sections TLS suivantes que si vous utilisez HTTPS. En HTTP non chiffré, passez directement à la section 5, « Créer les routes Geocore ».
Les étapes suivantes décrivent une option TLS autogérée pour un cluster à nœud unique. Si votre infrastructure fournit déjà des certificats et un contrôleur Ingress, utilisez son processus de gestion des certificats.
Installez cert-manager pour gérer les certificats dans le cluster :
helm repo add jetstack https://charts.jetstack.io
helm repo update
helm install cert-manager jetstack/cert-manager \
--namespace cert-manager \
--create-namespace \
--set installCRDs=true
Créez un fichier geocore-pki.yaml. Cet exemple crée une autorité de certification racine autosignée et un émetteur intermédiaire pour les certificats Geocore :
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: selfsigned-issuer
namespace: cert-manager
spec:
selfSigned: {}
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: root-ca
namespace: cert-manager
spec:
isCA: true
dnsNames:
- X.X.X.X
subject:
organizations:
- YourOrganization
countries:
- FR
commonName: Root CA Issuer
secretName: root-ca-secret
duration: 864000h
renewBefore: 700000h
privateKey:
algorithm: ECDSA
size: 256
issuerRef:
name: selfsigned-issuer
kind: ClusterIssuer
group: cert-manager.io
---
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: root-ca-issuer
namespace: cert-manager
spec:
ca:
secretName: root-ca-secret
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: geocore-cert
namespace: cert-manager
spec:
isCA: true
subject:
organizations:
- Your Organization Name
countries:
- Your Country Name
commonName: Geocore Intermediate Issuer
secretName: geocore-cert-secret
duration: 438000h
renewBefore: 420000h
privateKey:
algorithm: ECDSA
size: 256
issuerRef:
name: root-ca-issuer
kind: ClusterIssuer
group: cert-manager.io
---
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: geocore-issuer
namespace: cert-manager
spec:
ca:
secretName: geocore-cert-secret
Adresse IP k0sRemplacezX.X.X.Xpar l’adresse IP du cluster k0s à nœud unique avant d’appliquer le manifeste.
Appliquez la PKI :
kubectl apply -f geocore-pki.yaml
Faire confiance à l’autorité de certificationLorsque vous utilisez des certificats autosignés, ajoutez le certificat d’autorité de certification généré au magasin de certificats de confiance de chaque client accédant à l’API ou à Centui.
Dans un cluster à nœud unique, MetalLB peut attribuer une adresse IP externe à un service LoadBalancer. Ignorez cette section si votre plateforme Kubernetes fournit déjà des équilibreurs de charge.
Installez MetalLB :
helm repo add metallb https://metallb.github.io/metallb
helm repo update
helm install my-metallb metallb/metallb \
--namespace metallb \
--create-namespace \
--version 0.13.11
Créez un fichier metallb-ipaddresspool.yaml et remplacez X.X.X.X par l’adresse attribuée à l’hôte k0s :
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
name: geocore-pool
namespace: metallb
spec:
addresses:
- X.X.X.X/32
Appliquez le pool d’adresses :
kubectl apply -f metallb-ipaddresspool.yaml
Une fois Contour prêt, créez un fichier ingress-values.yaml. Choisissez l’onglet correspondant à la méthode d’exposition Envoy sélectionnée dans le chart Geocore.
certmanager:
enabled: false
tlsEnabled: false
api:
domain: api.local.centiloc.com
centui:
domain: centui.local.centiloc.com
certmanager:
enabled: true
issuer:
name: geocore-issuer
tlsEnabled: true
api:
domain: api.local.centiloc.com
centui:
domain: centui.local.centiloc.com
Installez le chart de routage :
helm install geocore-ingress-contour \
oci://harbor.centiloc.com/centiloc/geocore-ingress-contour \
--namespace geocore \
-f ingress-values.yaml
Cohérence des noms d’hôteLes valeursapi.domainetcentui.domaindoivent correspondre aux noms d’hôte associés dans la configuration du chart Geocore. Avec un NodePort Envoy, ajoutez le port Envoy àcore.centui.apiURL, par exempleapi.k0s.example.test:30180; ne l’ajoutez pas àapi.domain.
Faites pointer les enregistrements DNS publics vers l’adresse externe d’Envoy :
<ingress-controller-IP> api.local.centiloc.com
<ingress-controller-IP> centui.local.centiloc.com
Pour une preuve de concept locale, vous pouvez ajouter les mêmes entrées au fichier hosts de la machine cliente. En production, créez les enregistrements DNS correspondants dans votre zone DNS.
Une fois les enregistrements résolus vers Envoy, ouvrez Centui à l’URL configurée et vérifiez que les requêtes API aboutissent. Si l’un des services n’est pas disponible, vérifiez d’abord qu’Envoy expose son adresse externe, puis contrôlez le chart de routage Geocore et les valeurs de FQDN.