Kourier est une passerelle d'entrée légère et open source, native à Knative et basée sur Envoy, fournie par la communauté Knative. Déployez-la pour acheminer le trafic HTTP et HTTPS entre les révisions Knative, configurer des services gRPC, définir des délais d'expiration et des règles de nouvelle tentative, gérer les certificats TLS (Transport Layer Security) et intégrer des services d'autorisation externes.
Prérequis
Avant de commencer, assurez-vous d'avoir :
Déployé Knative dans votre cluster ACK. Consultez Déployer et gérer Knative.
Déployer la passerelle Kourier
Déployez Kourier lors de l'installation initiale de Knative (via la console ACK) ou après le déploiement (à l'aide de kubectl).
Pour une nouvelle installation de Knative
Connectez-vous à la console ACK. Dans le volet de navigation de gauche, cliquez sur Clusters.
Sur la page Clusters, cliquez sur le nom de votre cluster. Dans le volet de navigation de gauche, sélectionnez Applications > Knative.
Sous l'onglet Components, localisez Kourier dans la section Add-on Component et cliquez sur Deploy dans la colonne Actions. Dans la boîte de dialogue qui s'affiche, cliquez sur Confirm. L'état de Kourier dans la colonne Status passe à Deployed.
Pour une installation existante de Knative
-
Exécutez la commande suivante pour ouvrir la ConfigMap
config-networkdans votre éditeur par défaut :kubectl -n knative-serving edit configmap config-network -
Dans l'éditeur, repérez la clé
ingress.classsous la sectiondataet modifiez sa valeur enkourier.ingress.networking.knative.dev, comme illustré ci-dessous :apiVersion: v1 data: ... ingress.class: kourier.ingress.networking.knative.dev # Use the Kourier gateway ... kind: ConfigMap metadata: name: config-network namespace: knative-serving Enregistrez et fermez le fichier. Kubernetes applique automatiquement la modification.
(Facultatif) Configurer un CLB interne
Par défaut, Kourier crée un Classic Load Balancer (CLB) accessible depuis Internet. Pour utiliser un CLB interne à la place, ajoutez l'annotation service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type: "intranet" au manifeste du service Kourier :
apiVersion: v1
kind: Service
metadata:
name: kourier
namespace: knative-serving
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type: "intranet"
...
spec:
ports:
- name: http2
port: 80
protocol: TCP
targetPort: 8080
- name: https
port: 443
protocol: TCP
targetPort: 8443
selector:
app: 3scale-kourier-gateway
type: LoadBalancer
La valeur d'annotation par défaut estinternet. Définissez-la surintranetpour basculer vers un CLB interne.
Accéder à un service Knative via la passerelle Kourier
Les étapes suivantes utilisent un exemple de service Knative nommé helloworld-go pour illustrer l'accès HTTP et HTTPS. Commencez par déployer le service, puis choisissez le protocole souhaité.
Les commandescurlci-dessous transmettent le nom de domaine dans l'en-têteHostcar le DNS n'est pas configuré par défaut. Si vous configurez le DNS pour la passerelle, vous pouvez omettre l'option-H "Host:".
Déployer l'exemple de service
Connectez-vous à la console ACK. Dans le volet de navigation de gauche, cliquez sur Clusters.
Sur la page Clusters, cliquez sur le nom de votre cluster. Dans le volet de navigation de gauche, sélectionnez Applications > Knative.
-
Sous l'onglet Services, définissez Namespace sur default, cliquez sur Create from Template, collez le code YAML suivant dans l'éditeur et cliquez sur Create.
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: helloworld-go spec: template: spec: containers: - image: registry.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-go:73fbdd56 env: - name: TARGET value: "Knative"Lorsque Status affiche Created, le service est prêt.
Sous l'onglet Services, notez le nom de domaine dans la colonne Default Domain et l'adresse IP de la passerelle dans la colonne Gateway pour le service
helloworld-go. Vous aurez besoin de ces valeurs lors des prochaines étapes.
Accès via HTTP
Exécutez la commande suivante en remplaçant l'adresse IP de la passerelle et le nom de domaine par les valeurs que vous avez notées :
curl -H "Host: helloworld-go.default.example.com" http://8.141.XX.XX
Résultat attendu :
Hello Knative!
Accès via HTTPS
Étape 1 : Générer un certificat TLS.
Exécutez les commandes suivantes pour créer un certificat auto-signé :
openssl genrsa -out tls.key 4096
openssl req -subj "/CN=*.example.com/L=*.example.com" -sha256 -new -key tls.key -out tls.csr
echo subjectAltName = DNS:helloworld-go.default.example.com,DNS:helloworld-go.default.example.cn > extfile.cnf
openssl x509 -req -days 3650 -sha256 -in tls.csr -signkey tls.key -out tls.crt -extfile extfile.cnf
Cette opération génère une clé RSA de 4096 bits et un certificat valable pendant 3650 jours, avec des noms alternatifs de sujet (SAN) pour helloworld-go.default.example.com et helloworld-go.default.example.cn.
Étape 2 : Créer un Secret à partir du certificat.
kubectl -n knative-serving create secret tls kourier-cert --key tls.key --cert tls.crt
Étape 3 : Vérifier l'existence du déploiement net-kourier-controller.
kubectl get deployments -n knative-serving
Étape 4 : Configurer le certificat dans le contrôleur.
kubectl -n knative-serving edit deployment net-kourier-controller
Sous spec.containers[].env, ajoutez les deux variables d'environnement suivantes :
...
spec:
containers:
- env:
- name: CERTS_SECRET_NAMESPACE
value: knative-serving
- name: CERTS_SECRET_NAME
value: kourier-cert
...
| Paramètre | Description |
|---|---|
CERTS_SECRET_NAMESPACE |
Le namespace où le Secret a été créé (knative-serving) |
CERTS_SECRET_NAME |
Le nom du Secret (kourier-cert) |
Étape 5 : Vérifier que le pod du contrôleur est en cours d'exécution.
kubectl -n knative-serving get po
Résultat attendu :
NAME READY STATUS RESTARTS AGE
net-kourier-controller-****** 1/1 Running 0 10s
Étape 6 : Accéder au service via HTTPS.
curl -H "Host: helloworld-go.default.example.com" -k --cert tls.crt --key tls.key https://8.141.XX.XX
Résultat attendu :
Hello Knative!
(Facultatif) Consulter le tableau de bord de surveillance Knative
Knative intègre une surveillance native. Sur la page Knative, cliquez sur l'onglet Monitoring Dashboards pour consulter les métriques de vos services. Pour obtenir des instructions de configuration, consultez Consulter le tableau de bord de surveillance Knative.
Étapes suivantes
Utiliser des noms de domaine et des chemins personnalisés — configurez des noms de domaine personnalisés pour les services Knative.
Configurer un certificat pour accéder aux services via HTTPS — mettez en place des certificats TLS adaptés à la production.
Déployer des services gRPC dans Knative — améliorez l'efficacité réseau avec gRPC.
Configurer la sonde de port dans Knative — surveillez l'état de santé et la disponibilité des services Knative.
Associer une EIP à l'instance de conteneur élastique sur laquelle s'exécute un service Knative — connectez une instance de conteneur élastique à Internet à l'aide d'une adresse IP élastique (EIP).