Wie verwende ich TLS-Zertifikate, um HTTPS-Verbindungen für meine Amazon-EKS-Anwendungen zu aktivieren?
Ich möchte Transport-Layer-Security-Zertifikate (TLS) verwenden, um HTTPS-Verbindungen für meine Amazon-Elastic-Kubernetes-Service-Anwendungen (Amazon EKS) zu aktivieren.
Kurzbeschreibung
Um HTTPS-Verbindungen für Ihre Amazon-EKS-Anwendungen zu aktivieren, müssen Sie:
- Sich ein gültiges TLS-Zertifikat für Ihre benutzerdefinierte Domain holen.
- Ihren Kubernetes-Service mit dem Load-Balancer-Servicetyp verfügbar machen oder Ihr Kubernetes-Eingangsobjekt mit dem AWS Load Balancer Controller verfügbar machen.
- Ihre benutzerdefinierte Domain dem DNS des Load Balancers zuordnen.
Lö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.
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 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-Service mithilfe des Load-Balancer-Servicetyps verfügbar
Hinweis: Wenn Sie das Ingress-Objekt verwenden möchten, um Ihre Anwendung verfügbar zu machen, fahren Sie mit dem Abschnitt Stellen Sie Ihren Kubernetes-Service mithilfe des Ingress-Objekts zur Verfügung fort.
1. Verwenden Sie den Servicetyp LoadBalancer, um eine service.yaml-Manifestdatei zu erstellen. Beispiel:
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 Domäne mit dem DNS des Load Balancers fort.
Machen Sie Ihren Kubernetes-Service mithilfe des Ingress-Objekts verfügbar
Hinweis: Bei der folgenden Lösung wird davon ausgegangen, dass Sie den AWS Load Balancer Controller in Ihrem Amazon-EKS-Cluster installiert haben.
1. Erstellen Sie einen Kubernetes-Service 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/tls-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 Services vom Typ LoadBalancer zurückzugeben:
$ kubectl get service
2. Führen Sie den folgenden Befehl aus, um die DNS-URL des Services vom Typ Ingress zurückzugeben:
$ kubectl get ingress/web-nginx-ingress
3. 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

Relevanter Inhalt
- AWS OFFICIALAktualisiert vor 6 Monaten
- AWS OFFICIALAktualisiert vor 10 Monaten
- AWS OFFICIALAktualisiert vor 9 Monaten
- AWS OFFICIALAktualisiert vor einem Jahr