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

Lesedauer: 4 Minute
0

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

Kurze Beschreibung

Um HTTPS-Verbindungen für Ihre Amazon EKS-Anwendungen zu aktivieren, müssen Sie:

  • Holen Sie sich ein gültiges TLS-Zertifikat für Ihre benutzerdefinierte Domain.
  • Machen Sie Ihren Kubernetes-Dienst mit dem Load-Balancer-Diensttyp verfügbar oder machen Sie Ihr Kubernetes-Ingress-Objekt mithilfe des AWS Load Balancer Controllers (auf GitHub) verfügbar.
  • Ordnen Sie Ihre benutzerdefinierte Domain dem DNS des Load-Balancers zu.

Auflösung

Holen Sie sich ein gültiges TLS-Zertifikat für Ihre benutzerdefinierte Domain:

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 Amazon Resource Name (ARN) des Zertifikats, das Sie mit dem HTTPS-Listener des Load-Balancers verwenden möchten.

  1. Führen Sie den folgenden Befehl aus, um eine NGINX-Beispielbereitstellung zu erstellen:
$ kubectl create deploy web --image=nginx --port 80 --replicas=3
  1. Führen Sie den folgenden Befehl aus, um zu überprüfen, ob Kubernetes-Pods in Ihrem Amazon EKS-Cluster bereitgestellt sind:
$ 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.

Machen Sie Ihren Kubernetes-Dienst mithilfe des Load-Balancer-Diensttyps verfügbar

**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.

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-backend-protocol: http
    # TODO: Fill in with the ARN of your certificate.
    service.beta.kubernetes.io/aws-load-balancer-tls-cert: arn:aws:acm:{region}:{user id}:certificate/{id}
    # Only run TLS on the port named "https" below.
    service.beta.kubernetes.io/aws-load-balancer-tls-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.

Machen Sie Ihren Kubernetes-Dienst mithilfe des Ingress-Objekts verfügbar

**Hinweis:**Die folgende Lösung geht davon aus, dass Sie den AWS Load Balancer Controller in Ihrem Amazon EKS-Cluster installiert haben.

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 will be 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 vorherige Ingress-Manifest überwacht HTTP und HTTPS, beendet dann TLS auf ALB und leitet 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

  1. Führen Sie den folgenden Befehl aus, um die DNS-URL des Dienstes vom Typ** LoadBalancer** zurückzugeben:
$ 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
  1. Ordnen Sie Ihren benutzerdefinierten Domainnamen Ihrem Load-Balancer-Namen zu.

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

https://yourdomain.com
AWS OFFICIAL
AWS OFFICIALAktualisiert vor einem Jahr