Wie verwende ich TLS-Zertifikate, um HTTPS-Verbindungen für meine Amazon EKS-Anwendungen zu aktivieren?

Lesedauer: 4 Minute
0

Ich möchte TLS-Zertifikate verwenden, um HTTPS-Verbindungen für meine Amazon Elastic Kubernetes Service (Amazon EKS)-Anwendungen zu aktivieren.

Kurzbeschreibung

Um HTTPS-Verbindungen für Ihre Amazon EKS-Anwendungen zu aktivieren, führen Sie die folgenden Aufgaben aus:

  • Holen Sie sich ein gültiges TLS-Zertifikat für Ihre benutzerdefinierte Domain.
  • Verwenden Sie den Diensttyp Load Balancer, um Ihren Kubernetes-Dienst darzustellen, oder verwenden Sie den AWS Load Balancer-Controller, um Ihr Kubernetes-Ingress-Objekt darzustellen.
  • Ordnen Sie Ihre benutzerdefinierte Domain dem DNS des Load-Balancers zu.

Behebung

Ein gültiges TLS-Zertifikat für Ihre benutzerdefinierte Domain holen

Gehen Sie wie folgt vor, um ein gültiges TLS-Zertifikat für Ihre benutzerdefinierte Domain zu holen:

  1. Fordern Sie ein öffentliches AWS Certificate Manager (ACM)-Zertifikat für Ihre benutzerdefinierte Domain an oder laden Sie Ihr eigenes TLS-Zertifikat auf ACM hoch.

  2. Identifizieren Sie den ARN (Amazon Resource Name) des Zertifikats, das Sie mit dem HTTPS-Listener des Load-Balancers verwenden möchten.

  3. Führen Sie den folgenden Befehl aus, um eine NGINX-Beispielbereitstellung zu erstellen:

    $ kubectl create deploy web --image=nginx --port 80 --replicas=3
  4. Führen Sie den folgenden Befehl aus, um zu überprüfen, ob Kubernetes-Pods in Ihrem Amazon EKS-Cluster bereitgestellt werden:

    $ kubectl get pods -l app=web

    **Hinweis:**Die Pods tragen die Bezeichnung app=web. Verwenden Sie dieses Label als Selektor für das Serviceobjekt, um eine Gruppe von Pods zu identifizieren.

Verwenden Sie den Diensttyp Load Balancer, um Ihren Kubernetes-Dienst verfügbar zu machen

**Hinweis:**Wenn Sie das Ingress-Objekt verwenden möchten, um Ihre Anwendung verfügbar zu machen, fahren Sie mit dem Abschnitt Machen Sie Ihren Kubernetes-Dienst mithilfe des Ingress-Objekts verfügbar fort.

Gehen Sie wie folgt vor, um Ihren Kubernetes-Dienst mithilfe des Diensttyps Load Balancer verfügbar zu machen:

  1. Verwenden Sie den Diensttyp LoadBalancer, um eine service.yaml-Manifest-Datei zu erstellen:

    cat <<EOF > loadbalancer.yaml
    apiVersion: v1
    kind: Service
    metadata:
      name: lb-service
      annotations:
        # Note that the backend talks over HTTP.
        service.beta.kubernetes.io/aws-load-balancer-type: external
        # TODO: Fill in with the ARN of your certificate.
        service.beta.kubernetes.io/aws-load-balancer-ssl-cert: arn:aws:acm:{region}:{user id}:certificate/{id}
        # Run TLS only on the port named "https" below.
        service.beta.kubernetes.io/aws-load-balancer-ssl-ports: "https"
        # By default In-tree controller will create a Classic LoadBalancer if you require a NLB uncomment below annotation.
        # service.beta.kubernetes.io/aws-load-balancer-type: "nlb"
    spec:
      selector:
        app: web
      ports:
      - name: http
        port: 80
        targetPort: 80
      - name: https
        port: 443
        targetPort: 80
      type: LoadBalancer
    EOF
  2. Bearbeiten Sie die Anmerkung service.beta.kubernetes.io/aws-load-balancer-tls-cert, sodass sie den ARN des ACM enthält.

  3. Führen Sie den folgenden Befehl aus, um die Datei loadbalancer.yaml anzuwenden:

    $ kubectl create -f loadbalancer.yaml
  4. Fahren Sie mit dem Abschnitt Verknüpfen Sie Ihre benutzerdefinierte Domain mit dem DNS des Load Balancers fort.

Ihren Kubernetes-Dienst mithilfe des Ingress-Objekts verfügbar machen

**Hinweis:**Die folgende Lösung geht davon aus, dass Sie den AWS Load Balancer Controller in Ihrem Amazon EKS-Cluster installiert haben. Weitere Informationen finden Sie unter aws-load-balancer-controller auf der GitHub-Website.

Gehen Sie wie folgt vor, um das Ingress-Objekt zum Bereitstellen Ihres Kubernetes-Dienstes zu verwenden:

  1. Erstellen Sie einen Kubernetes-Dienst vom Typ NodePort anhand des folgenden Beispiels:
    cat  <<EOF  > ingressservice.yaml
    apiVersion: v1
    kind: Service
    metadata:
      name: web-nginx
    spec:
      ports:
        - port: 80
          targetPort: 80
          protocol: TCP
      type: NodePort
      selector:
        app: web
    ---
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: "web-nginx-ingress"
      annotations:
        # Below annotation is to specify if the loadbalancer is "internal" or "internet-facing"
        alb.ingress.kubernetes.io/scheme: internet-facing
        # TODO: Fill in with the ARN of your certificate.
        alb.ingress.kubernetes.io/certificate-arn: arn:aws:acm:us-west-2:xxxx:certificate/xxxxxx
        # TODO: Fill in the listening ports.
        alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80}, {"HTTPS":443}]'
        # Set HTTP to HTTPS redirects. Every HTTP listener configured is redirected to below mentioned port over HTTPS.
        alb.ingress.kubernetes.io/ssl-redirect: '443'
      labels:
        app: web
    spec:
      ingressClassName: alb
      rules:
        - http:
            paths:
              - path: /
                pathType: Prefix
                backend:
                  service:
                    name: "web-nginx"
                    port:
                      number: 80
    EOF
    Hinweis: Das vorhergehende Ingress-Manifest lauscht auf HTTP und HTTPS, beendet dann TLS auf Application Load Balancer und leitet dann HTTP zu HTTPS um.
  2. Führen Sie den folgenden Befehl aus, um die Datei ingressservice.yaml anzuwenden:
    $ kubectl create -f ingressservice.yaml

Ordnen Sie Ihre benutzerdefinierte Domain dem DNS des Load-Balancers zu

Gehen Sie wie folgt vor, um Ihre benutzerdefinierte Domain mit dem DNS des Load Balancers zu verknüpfen:

  1. Um die DNS-URL des Dienstes vom Typ LoadBalancer zurückzugeben, führen Sie folgenden Befehl aus:

    $ kubectl get service
  2. Führen Sie den folgenden Befehl aus, um die DNS-URL des Dienstes vom Typ ** Ingress** zurückzugeben:

    $ kubectl get ingress/web-nginx-ingress
  3. Verknüpfen Sie Ihren benutzerdefinierten Domainnamen mit dem Namen Ihres Load Balancer.

  4. Testen Sie Ihre benutzerdefinierte Domain in einem Webbrowser mit dem folgenden HTTPS-Protokoll:

    https://yourdomain.com
AWS OFFICIAL
AWS OFFICIALAktualisiert vor 10 Monaten