Wie verwende ich TLS-Zertifikate, um HTTPS-Verbindungen für meine Amazon EKS-Anwendungen zu aktivieren?
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.
- Führen Sie den folgenden Befehl aus, um eine NGINX-Beispielbereitstellung zu erstellen:
$ kubectl create deploy web --image=nginx --port 80 --replicas=3
- 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
- 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
4.Testen Sie Ihre benutzerdefinierte Domain in einem Webbrowser mit dem folgenden HTTPS-Protokoll:
https://yourdomain.com

Relevanter Inhalt
- AWS OFFICIALAktualisiert vor 2 Monaten
- AWS OFFICIALAktualisiert vor 8 Monaten
- AWS OFFICIALAktualisiert vor einem Jahr