ACM を使用して Amazon EKS ワークロードの HTTPS トラフィックを終了する方法を教えてください。

所要時間2分
0

AWS Certificate Manager (ACM) を使用して Amazon Elastic Kubernetes Service (Amazon EKS) ワークロードの HTTPS トラフィックを終了したいと考え考えています。

簡単な説明

Kubernetes Service オブジェクトの Elastic Load Balancing レベルで HTTPS トラフィックを終了するには、以下を実行する必要があります。

  1. カスタムドメインのパブリック ACM 証明書をリクエストします。
  2. タイプフィールドを LoadBalancer に設定して Kubernetes Service を公開します。
  3. Kubernetes ウェブサイトの service.beta.kubernetes.io/aws-load-balancer-ssl-cert アノテーションを使用して、Kubernetes Service で ACM 証明書の Amazon リソースネーム (ARN) を指定します。このアノテーションにより、Kubernetes API サーバーが証明書の作成時にその証明書を Classic Load Balancer に関連付けることができます。
  4. カスタムドメインをロードバランサーに関連付けます。

次の解決策の前提は以下のとおりです。

  • ワーカーノードが関連付けられたアクティブな Amazon EKS クラスターがあること。
  • Classic Load Balancer を使用していること。

**注:**Application Load Balancer を使用するには、Amazon EKS にアプリケーションロードバランシングをデプロイする必要があります

**注:**Network Load Balancer での TLS 接続の終了は、Kubernetes 1.15 以降でのみサポートされています。詳細については、Kubernetes ウェブサイトのSupport TLS termination with AWS NLB」を参照してください。

解決策

1.カスタムドメインのパブリック ACM 証明書をリクエストします。

2.ロードバランサーの HTTPS リスナーで使用する証明書の ARN を特定します。

3.Amazon EKS クラスターに登録されているノードを識別するには、kubectl が設定されている環境で次のコマンドを実行します。

$ kubectl get nodes

4.テキストエディターで、以下に基づいて deployment.yamlマニフェストファイルを作成します。

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.次のコマンドを実行して、Kubernetes Deploymentオブジェクトを作成します。

$ kubectl create -f deployment.yaml

6.次のコマンドを実行して、Kubernetes ポッド が Amazon EKS クラスターにデプロイされていることを確認します。

$ kubectl get pods

**注:**ポッドには app=echo-podというラベルが付いています。このラベルを Service オブジェクトのセレクタとして使用して、一連のポッドを特定できます。

7.テキストエディターで、次の例に基づいて service.yaml マニフェストファイルを作成します。次に、service.beta.kubernetes.io/aws-load-balancer-ssl-cert アノテーションを編集して、ステップ 2 の ACM ARN を指定します。

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.次のコマンドを実行して、Service オブジェクトを作成します。

$ kubectl create -f service.yaml

9.次のコマンドを実行して、LoadBalancer タイプのサービスの DNS URL を返すように設定します。

$ kubectl get service

**注:**クラスターで多数のアクティブなサービスが実行されている場合は、コマンド出力から LoadBalancer タイプの正しいサービスの URL を取得します。

10.Amazon Elastic Compute Cloud (Amazon EC2) コンソールを開き、[ロードバランサー] を選択します。

11.ロードバランサーを選んで、**[リスナー]**を選択します。

12.[リスナー ID] で、ロードバランサーのポートが 443に設定されていることを確認します。

13.SSL 証明書については、YAML ファイルで定義した SSL 証明書がロードバランサーにアタッチされていることを確認します。

14.    カスタムドメイン名をロードバランサー名に関連付けます

15.ウェブブラウザで、次の HTTPS プロトコルを使用してカスタムドメインをテストします。

https://yourdomain.com

正常に応答すると、クライアントの詳細が記載された Web ページが返されます。この応答には、ホスト名、ポッド情報、サーバー値、リクエスト情報、およびリクエストヘッダーが含まれます。

**重要:**ACM との統合によって4096 ビットの RSA キーまたは EC キーを含む証明書をロードバランサーにインストールすることはできません。ロードバランサーでキーを使用するには、4096 ビット RSA キーまたは EC キーを含む証明書を AWS ID AWS Identity and Access Management (IAM) にアップロードする必要があります。次に、service.beta.kubernetes.io/aws-load-balancer-ssl-cert アノテーションが付いた対応する ARN を使用します。


コメントはありません