Wie verwende ich TLS-Zertifikate, um HTTPS-Verbindungen für meine Amazon EKS-Anwendungen zu aktivieren?
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:
-
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.
-
Identifizieren Sie den ARN (Amazon Resource Name) 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 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:
-
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
-
Bearbeiten Sie die Anmerkung service.beta.kubernetes.io/aws-load-balancer-tls-cert, sodass sie den ARN des ACM enthält.
-
Führen Sie den folgenden Befehl aus, um die Datei loadbalancer.yaml anzuwenden:
$ kubectl create -f loadbalancer.yaml
-
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:
- Erstellen Sie einen Kubernetes-Dienst vom Typ NodePort anhand des folgenden Beispiels:
Hinweis: Das vorhergehende Ingress-Manifest lauscht auf HTTP und HTTPS, beendet dann TLS auf Application Load Balancer und leitet dann HTTP zu HTTPS um.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
- 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:
-
Um die DNS-URL des Dienstes vom Typ LoadBalancer zurückzugeben, führen Sie folgenden Befehl aus:
$ kubectl get service
-
Führen Sie den folgenden Befehl aus, um die DNS-URL des Dienstes vom Typ ** Ingress** zurückzugeben:
$ kubectl get ingress/web-nginx-ingress
-
Verknüpfen Sie Ihren benutzerdefinierten Domainnamen mit dem Namen Ihres Load Balancer.
-
Testen Sie Ihre benutzerdefinierte Domain in einem Webbrowser mit dem folgenden HTTPS-Protokoll:
https://yourdomain.com
Relevanter Inhalt
- AWS OFFICIALAktualisiert vor 3 Jahren
- AWS OFFICIALAktualisiert vor 2 Jahren