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

最終更新日: 2019 年 4 月 22 日

AWS Certificate Manager (ACM) を使用して Amazon Elastic Container Service for Kubernetes (Amazon EKS) ワークロードの HTTPS トラフィックを終了するにはどうすればよいですか?

簡単な説明

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

  • タイプフィールドを Load Balancer に設定して Kubernetes のサービスを公開します。
  • ACM 証明書Amazon リソースネーム (ARN) を指定します。これにより、Elastic Load Balancing の作成時に Kubernetes の API サーバーがその証明書を関連付けることができます。

注 : 以下のソリューションは、関連するワーカーノードを持つアクティブな Amazon EKS クラスターをお持ちであることを前提としています。

解決方法

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

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

$ kubectl get nodes

3.    テキストエディタで、次のコードを使用して 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

4.    Kubernetes のデプロイメントオブジェクトを作成するには、次のコマンドを実行します。

$ kubectl create -f deployment.yaml

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

$ kubectl get pods

注: このポッドのラベルは app=echo-pod です。このラベルをサービスオブジェクトのセレクタとして使用して、ポッドのセットを識別できます。

6.    テキストエディタで、次のコードを使用して service.yaml マニフェストファイルを作成します。

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

7.    サービスオブジェクトを作成するには、次のコマンドを実行します。

$ kubectl create -f service.yaml

8.    type LoadBalancer のサービスの DNS URL を返すには、次のコマンドを実行します。

$ kubectl get service

注: クラスター内で複数のアクティブなサービスが実行されている場合は、必ずコマンド出力をして、適切な type LoadBalancer のサービスの URL を取得してください。

9.    Amazon EC2 コンソールを開き、ロードバランサーを選択します。

10.    ロードバランサーを選んで、[Listeners] を選択します。

11.    Listener ID 用に、ロードバランサーポートが 443 に設定されていることを確認します。

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

13.    ウェブブラウザで、次の HTTPS プロトコルを使用してLoadBalancer の URL をテストします。

https://randomString1-randomString2.{region}.elb.amazonaws.com

正常なレスポンスでは、ホスト名、ポッド情報、サーバー値、要求情報、要求ヘッダーなど、クライアントに関する詳細が記載されたウェブページが返されます。


この記事はお役に立ちましたか?

改善できることはありますか?


さらにサポートが必要な場合