Gyakorlat – SSL/TLS engedélyezése az előtérbeli bejövő forgalomhoz

Befejeződött

A Fruit Smoothies cég számára rendkívül fontos a felhasználói adatok online biztonsága és védelme. Fontos, hogy a minősítési webhely engedélyezze a HTTPS-kapcsolatot az összes ügyfél számára. Az NGINX bejövőforgalom-vezérlő támogatja a TLS-megszakítást, és számos módot nyújt a HTTPS-tanúsítványok lekérésére és konfigurálására. Ez a gyakorlat a tanúsítványkezelő használatát mutatja be, amely automatikusan létrehozza a Let’s Encrypt-tanúsítványt, és felügyeleti funkciókat nyújt.

Ebben a gyakorlatban a következőket fogja végrehajtani:

  • A tanúsítványkezelő üzembe helyezése a Helm használatával
  • Egy ClusterIssuer erőforrás üzembe helyezése a Let’s Encrypthez
  • SSL/TLS engedélyezése a bejövő forgalom minősítési webszolgáltatásához
  • Az alkalmazás tesztelése

Az Azure Kubernetes Service-fürtön üzembe helyezett erőforrásokat megjelenítő diagram.

A tanúsítványkezelő üzembe helyezése

A tanúsítványkezelő egy Kubernetes-beli tanúsítványkezelési vezérlő, amellyel automatizálható a felhőbeli natív környezetek tanúsítványkezelése. A tanúsítványkezelő számos forrást támogat, például a Let's Encryptet, a HashiCorp Vaultot, a Venafit, az egyszerű aláírókulcs-párokat vagy az önaláírt tanúsítványokat. A cert-manager segítségével gondoskodhat a webhely tanúsítványának érvényességéről és naprakész voltáról, és megújíthatja a tanúsítványokat egy előre megadott időpontban azok lejárta előtt.

A tanúsítványkezelő a Kubernetes egyéni erőforrásait használja. A Kubernetes egyéni erőforrásai olyan objektumok, amelyekkel kiterjesztheti a Kubernetes API-t, vagy bevezetheti a saját API-ját egy fürtön. Az objektumtípusokat egyéni erőforrás-definíciós (CRD-) fájlok használatával határozhatja meg, az API-kiszolgáló pedig az objektum életciklusát kezeli.

Ebben a modulban a Helmmel telepíti tanúsítványkezelőt, majd úgy konfigurálja, hogy a Let's Encryptet használja tanúsítványkiállítóként.

  1. Elsőként hozzunk létre egy névteret a tanúsítványkezelőnek.

    kubectl create namespace cert-manager
    
  2. A tanúsítványkezelő megkereséséhez és telepítéséhez a Jetstack Helm-adattárat használja. Először adja hozzá a Jetstack Helm-adattárat az alábbi kód futtatásával.

    helm repo add jetstack https://charts.jetstack.io
    helm repo update
    
  3. Ezután futtassa a következő parancsot a tanúsítványkezelő a CRD-vel történő telepítéséhez.

    kubectl apply --validate=false -f https://raw.githubusercontent.com/jetstack/cert-manager/release-0.14/deploy/manifests/00-crds.yaml
    
  4. Telepítse a tanúsítványkezelő Helm-diagramját.

    helm install cert-manager \
        --namespace cert-manager \
        --version v0.14.0 \
        jetstack/cert-manager
    
  5. A telepítés végén az alábbi példához hasonló kimenetet kell látnia.

    NAME: cert-manager
    LAST DEPLOYED: Tue Jan  7 13:11:19 2020
    NAMESPACE: cert-manager
    STATUS: deployed
    REVISION: 1
    TEST SUITE: None
    NOTES:
    cert-manager has been deployed successfully!
    
  6. Ellenőrizze a telepítést a futó podok cert-manager névterének ellenőrzésével.

    kubectl get pods --namespace cert-manager
    

    Látni fogja, hogy a cert-manager, a cert-manager-cainjector és a cert-manager-webhook pod Running állapotban van. A TLS-eszközökhöz szükséges webhook kiépítése eltarthat néhány percig.

    NAME                                       READY   STATUS    RESTARTS   AGE
    cert-manager-5c6866597-zw7kh               1/1     Running   0          2m
    cert-manager-cainjector-577f6d9fd7-tr77l   1/1     Running   0          2m
    cert-manager-webhook-787858fcdb-nlzsq      1/1     Running   0          2m
    

Egy ClusterIssuer erőforrás üzembe helyezése a Let’s Encrypthez

A tanúsítványkezelő segítségével gondoskodhat a webhely tanúsítványának érvényességéről és naprakész voltáról, és megújíthatja a tanúsítványokat egy előre megadott időpontban azok lejárta előtt. Azonban a tanúsítványok kiadása előtt be kell állítania egy ClusterIssuert. A ClusterIssuer illesztőfelületként működik az olyan tanúsítványkiadó szolgáltatásoknál, mint a Let’s Encrypt.

A Let’s Encrypt egy nonprofit hitelesítésszolgáltató, amely TLS-tanúsítványokat nyújt. A Let’s Encrypttel beállíthat egy HTTP-kiszolgálót, és automatikusan lekérhet egy böngésző által megbízható tanúsítványt. A tanúsítvány lekérése és telepítése egy teljes mértékben automatizált folyamat, amelyhez nincs szükség emberi beavatkozásra, és a webkiszolgáló tanúsítványkezelő ügynöke felügyeli. További információt a Let’s Encryptről a modul végén található További információ szakaszban találhat.

  1. Szerkessze a cluster-issuer.yaml nevű fájlt az integrált szerkesztővel.

    code cluster-issuer.yaml
    
  2. Illessze a fájlba a következő szöveget.

    apiVersion: cert-manager.io/v1alpha2
    kind: ClusterIssuer
    metadata:
      name: letsencrypt
    spec:
      acme:
        server: https://acme-v02.api.letsencrypt.org/directory
        email: <your email> # IMPORTANT: Replace with a valid email from your organization
        privateKeySecretRef:
          name: letsencrypt
        solvers:
        - http01:
            ingress:
              class: nginx
    

    Az email kulcsban frissítse az értéket úgy, hogy a <your email> értéket a saját cégétől származó érvényes tanúsítvány-rendszergazdai e-mail-címre cseréli.

  3. A fájl mentéshez nyomja le a Ctrl+S billentyűkombinációt. A szerkesztőt a Ctrl+Q billentyűkombinációval zárja be.

  4. Alkalmazza a konfigurációt az parancs kubectl apply futtatásával. Helyezze üzembe a fürtkiállító konfigurációt a ratingsapp névtérben.

    kubectl apply \
        --namespace ratingsapp \
        -f cluster-issuer.yaml
    

    A következőhöz hasonló kimenet fog megjelenni.

    clusterissuer.cert-manager.io/letsencrypt created
    

SSL/TLS engedélyezése a bejövő forgalom minősítési webszolgáltatásához

A konfiguráció utolsó része a Kubernetes bejövő forgalmi fájljának konfigurálása az SSL/TLS engedélyezéséhez az értékelési webszolgáltatásban.

  1. Szerkessze a(z) ratings-web-ingress.yaml nevű fájlt az integrált szerkesztővel.

    code ratings-web-ingress.yaml
    
  2. Cserélje a fájl meglévő tartalmát a következő szövegre. Jegyezze fel a cert-manager.io/issuer jegyzet és az új tls szakasz hozzáadását.

    apiVersion: networking.k8s.io/v1beta1
    kind: Ingress
    metadata:
      name: ratings-web-ingress
      annotations:
        kubernetes.io/ingress.class: nginx
        cert-manager.io/cluster-issuer: letsencrypt
    spec:
      tls:
        - hosts:
          - frontend.<ingress ip>.nip.io # IMPORTANT: update <ingress ip> with the dashed public IP of your ingress, for example frontend.13-68-177-68.nip.io
          secretName: ratings-web-cert
      rules:
      - host: frontend.<ingress ip>.nip.io # IMPORTANT: update <ingress ip> with the dashed public IP of your ingress, for example frontend.13-68-177-68.nip.io
        http:
          paths:
          - backend:
              serviceName: ratings-web
              servicePort: 80
            path: /
    

    Ebben a fájlban frissítse a kulcsban található értéket a korábban lekért bejövő forgalom nyilvános, szaggatott IP-címével, például a <ingress ip> host frontend.13.68.177.68.nip.io. Ez az érték lehetővé teszi, hogy az IP-cím helyett egy gazdanéven keresztül férjen hozzá a bejövő forgalomhoz.

  3. A fájl mentéshez nyomja le a Ctrl+S billentyűkombinációt. A szerkesztőt a Ctrl+Q billentyűkombinációval zárja be.

  4. Alkalmazza a konfigurációt az parancs kubectl apply futtatásával. Helyezze üzembe a frissített Kubernetes bejövő fájlt a ratingsapp névtérben.

    kubectl apply \
        --namespace ratingsapp \
        -f ratings-web-ingress.yaml
    

    A következőhöz hasonló kimenet fog megjelenni.

    ingress.networking.k8s.io/ratings-web-ingress configured
    
  5. Ellenőrizze, hogy ki lett-e állítva a tanúsítvány.

    kubectl describe cert ratings-web-cert --namespace ratingsapp
    

    A következőhöz hasonló kimenet fog megjelenni.

    Name:         ratings-web-cert
    Namespace:    ratingsapp
    API Version:  cert-manager.io/v1alpha2
    Kind:         Certificate
    
    [..]
    
    Spec:
      Dns Names:
        frontend.13-68-177-68.nip.io
      Issuer Ref:
        Group:      cert-manager.io
        Kind:       ClusterIssuer
        Name:       letsencrypt
      Secret Name:  ratings-web-cert
    Status:
      Conditions:
        Last Transition Time:  2020-01-07T22:27:23Z
        Message:               Certificate is up to date and has not expired
        Reason:                Ready
        Status:                True
        Type:                  Ready
      Not After:               2020-04-06T21:27:22Z
    Events:
      Type    Reason        Age   From          Message
      ----    ------        ----  ----          -------
      Normal  GeneratedKey  36s   cert-manager  Generated a new private key
      Normal  Requested     36s   cert-manager  Created new CertificateRequest resource "ratings-web-cert-1603291776"
      Normal  Issued        34s   cert-manager  Certificate issued successfully
    

Az alkalmazás tesztelése

Az alkalmazás megtekintéséhez és használatához nyissa meg a bejövő forgalomhoz konfigurált gazdanevet egy webböngészőben, SSL-/TLS-kapcsolattal. Például: https: / /frontend.13.68.177.68.nip.io.

Képernyőkép a ratings-web alkalmazásról.

Ellenőrizze, hogy az előtér elérhető-e a HTTPS protokollon keresztül, és érvényes-e a tanúsítvány.

Képernyőkép az érvényes SSL-/TLS-tanúsítványról.

Összefoglalás

Ebben a gyakorlatban telepítette, majd a Let’s Encrypt-tanúsítványok automatikus kiadásához konfigurálta a tanúsítványkezelőt. Ezután úgy konfigurálta a korábban létrehozott bejövő forgalmat, hogy a titkosított TLS-/SSL-forgalmat az imént létrehozott tanúsítványokon keresztül szolgálja ki.

Ezután konfigurálja az AKS-fürt figyelését.