Wie beende ich den HTTPS-Traffic auf Amazon EKS-Workloads mit ACM?

Lesedauer: 4 Minute
0

Ich möchte den HTTPS-Traffic auf Amazon Elastic Kubernetes Service (Amazon EKS) -Workloads mit AWS Certificate Manager (ACM) beenden.

Kurzbeschreibung

Um den HTTPS-Verkehr auf Elastic Load Balancing-Ebene für ein Kubernetes Service-Objekt zu beenden, müssen Sie:

  1. Beantragen Sie ein öffentliches ACM-Zertifikat für Ihre benutzerdefinierte Domäne.
  2. Veröffentlichen Sie Ihren Kubernetes-Service mit demTypFeld aufLoadBalancer.
  3. Geben Sie denAmazon-Ressourcennamen (ARN) Ihres ACM-Zertifikats in Ihrem Kubernetes-Service mit der Anmerkungservice.beta.kubernetes.io/aws-load-balancer-ssl-cert von der Kubernetes-Website an. Die Anmerkung ermöglicht es dem Kubernetes-API-Server, dieses Zertifikat dem Classic Load Balancer (CLB, Lastenausgleichsdienst) zuzuordnen, wenn es erstellt wird.
  4. Verknüpfen Sie Ihre benutzerdefinierte Domäne mit dem Load-Balancer.

Die folgende Auflösung geht davon aus, dass:

  • Sie einen aktiven Amazon EKS-Cluster mit zugehörigen Worker-Knoten haben.
  • Sie mit einem Classic Load Balancer arbeiten.

**Hinweis:**Um einen Application Load Balancer zu verwenden, müssen Sieapplication load balancing, Anwendungslastenausgleich) auf Amazon EKS bereitstellen.

**Hinweis:**Die Beendigung von TLS-Verbindungen auf einem Network Load Balancer wird nur in Kubernetes 1.15 oder höher unterstützt. Weitere Informationen finden Sie auf der Kubernetes-Website unterUnterstützung der TLS-Terminierung mit AWS NLB.

Behebung

1.    Beantragen Sie ein öffentliches ACM-Zertifikat für Ihre benutzerdefinierte Domäne.

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

  2. Um die in Ihrem Amazon EKS-Cluster registrierten Knoten zu identifizieren, führen Sie den folgenden Befehl in der Umgebung aus, in derkubectl konfiguriert ist:

$ kubectl get nodes

4.    Erstellen Sie in Ihrem Texteditor einedeployment.yaml-Manifestdatei nach folgendem Muster:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: echo-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: echo-pod
  template:
    metadata:
      labels:
        app: echo-pod
    spec:
      containers:
      - name: echoheaders
        image: k8s.gcr.io/echoserver:1.10
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 8080

5.    Um ein KubernetesDeployment-Objekt zu erstellen, führen Sie den folgenden Befehl aus:

$ kubectl create -f deployment.yaml

6.    Führen Sie den folgenden Befehl aus, um zu überprüfen, ob Kubernetes-Pods in Ihrem Amazon EKS-Cluster bereitgestellt werden:

$ kubectl get pods

Hinweis:Die Pods sind mit app=echo-pod gekennzeichnet. Sie können diese Bezeichnung als Selektor für dasService-Objekt verwenden, um eine Gruppe von Pods zu identifizieren.

7.    Erstellen Sie in Ihrem Texteditor eineservice.yaml-Manifestdatei nach dem folgenden Beispiel. Bearbeiten Sie dann die Anmerkungservice.beta.kubernetes.io/aws-load-balancer-ssl-cert, um den ACM-ARN aus Schritt 2 anzugeben.

apiVersion: v1
kind: Service
metadata:
  name: echo-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-ssl-cert: arn:aws:acm:{region}:{user id}:certificate/{id}
    # Only run SSL on the port named "https" below.
    service.beta.kubernetes.io/aws-load-balancer-ssl-ports: "https"
spec:
  selector:
    app: echo-pod
  ports:
  - name: http
    port: 80
    targetPort: 8080
  - name: https
    port: 443
    targetPort: 8080
  type: LoadBalancer

8.    Führen Sie den folgenden Befehl aus, um ein Service-Objekt zu erstellen:

$ kubectl create -f service.yaml

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

$ kubectl get service

Hinweis:Wenn in Ihrem Cluster zahlreiche aktive Dienste ausgeführt werden, dann entnehmen Sie der Befehlsausgabe die URL des richtigen Dienstes vom TypLoadBalancer.

10.    Öffnen Sie dieAmazon Elastic Compute Cloud (Amazon EC2)-Konsoleund wählen SieLoad Balancers.

11.    Wählen Sie Ihren Load Balancer und dannListeners.

12.    Für dieListener-IDbestätigen Sie, dass der Port Ihres Lastenausgleichs Load auf443 gesetzt ist.

13.    Bestätigen Sie für dasSSL-Zertifikat, dass das in der YAML-Datei definierte SSL-Zertifikat an Ihren Load Balancer angehängt ist.

14.    Verknüpfen Sie Ihren benutzerdefinierten Domänennamen mit dem Namen Ihres Lastverteilers.

15.    Testen Sie Ihre benutzerdefinierte Domäne in einem Webbrowser mit dem folgenden HTTPS-Protokoll:

https://yourdomain.com

Bei einer erfolgreichen Antwort wird eine Webseite mit Informationen über den Kunden zurückgegeben. Diese Antwort umfasst den Hostnamen, Pod-Informationen, Serverwerte, Anforderungsinformationen und Anforderungsheader.

Wichtig:Über die Integration mit ACM können Sie keine Zertifikate mit 4096-Bit-RSA-Schlüsseln oder EC-Schlüsseln auf Ihrem Load Balancer installieren. Um die Schlüssel mit Ihrem Load Balancer zu verwenden, müssen Sie Zertifikate mit 4096-Bit-RSA- oder EC-Schlüsseln in AWS Identity and Access Management (IAM) hochladen. Verwenden Sie dann den entsprechenden ARN mit der Anmerkungservice.beta.kubernetes.io/aws-load-balancer-ssl-cert.


AWS OFFICIAL
AWS OFFICIALAktualisiert vor 2 Jahren