スキップしてコンテンツを表示

TLS 証明書を使用して Amazon EKS アプリケーションの HTTPS 接続を有効にするにはどうすればよいですか?

所要時間3分
0

TLS 証明書を使用して Amazon Elastic Kubernetes Service (Amazon EKS) アプリケーションの HTTPS 接続を有効にしたいと考えています。

簡単な説明

Amazon EKS アプリケーションの HTTPS 接続を有効にするには、次のタスクを実行します。

  • カスタムドメインの有効な TLS 証明書を入手します。
  • ロードバランサーサービスタイプを使用して Kubernetes サービスを公開するか、AWS Load Balancer Controller を使用して Kubernetes イングレスオブジェクトを公開します。
  • カスタムドメインをロードバランサーの DNS に関連付けます。

解決策

カスタムドメインの有効な TLS 証明書を取得する

次の手順を実行して、カスタムドメインの有効な TLS 証明書を取得します。

  1. カスタムドメインのAWS Certificate Manager (ACM) 公開証明書をリクエストするか、独自の TLS 証明書を ACM にアップロードします。

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

  3. 次のコマンドを実行し、サンプルの NGINX デプロイを作成します。

    $ kubectl create deploy web --image=nginx --port 80 --replicas=3
  4. 次のコマンドを実行して、Kubernetes ポッド が Amazon EKS クラスターにデプロイされていることを確認します。

    $ kubectl get pods -l app=web

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

ロードバランサーサービスタイプを使用して Kubernetes サービスを公開する

**注:**イングレスオブジェクトを使用してアプリケーションを公開するには、「イングレスオブジェクトを使用して Kubernetesサービスを公開する」セクションに進んでください。

次の手順を実行して、ロードバランサーサービスタイプを使用して Kubernetes サービスを公開します。

  1. サービスタイプ LoadBalancer を使用して、service.yaml マニフェストファイルを作成します。

    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
  2. アノテーション service.beta.kubernetes.io/aws-load-balancer-tls-cert を編集して ACM の ARN を含めます。

  3. 次のコマンドを実行して、loadbalancer.yaml ファイルを適用します。

    $ kubectl create -f loadbalancer.yaml
  4. カスタムドメインをロードバランサーの DNS に関連付ける」セクションに進んでください。

イングレスオブジェクトを使用して Kubernetes サービスを公開する

注: 以下の解決策では、Amazon EKS クラスターに AWS Load Balancer Controller がインストールされていることを前提としています。詳細については、GitHub ウェブサイトの「aws-load-balancer-controller」を参照してください。

イングレスオブジェクトを使用して Kubernetes サービスを公開するには、次の手順を実行します。

  1. 次の例に基づいて、NodePort タイプの Kubernetes サービスを作成します。
    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
    **注:**前述のイングレス・マニフェストは HTTP と HTTPS でリッスンし、Application Load Balancer で TLS を終了して HTTP を HTTPS にリダイレクトします。
  2. ingressservice.yaml ファイルを適用するには、次のコマンドを実行します。
    $ kubectl create -f ingressservice.yaml

カスタムドメインをロードバランサーの DNS に関連付ける

カスタムドメインをロードバランサーの DNS に関連付けるには、次の手順を実行します。

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

    $ kubectl get service
  2. Ingressタイプのサービスの DNS URL を返すには、次のコマンドを実行します。

    $ kubectl get ingress/web-nginx-ingress
  3. カスタムドメイン名をロードバランサー名に関連付けます

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

    https://yourdomain.com
AWS公式更新しました 2年前
コメントはありません

関連するコンテンツ