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

所要時間3分
0

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

簡単な説明

Amazon EKS アプリケーションの HTTPS 接続を有効にするには、以下を行う必要があります。

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

解決方法

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

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

2.    ロードバランサーの HTTPS リスナーで使用する証明書の Amazon リソースネーム (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.    service.yaml マニフェストファイルを作成するには、サービスタイプ** LoadBalancer**を使用します。

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-backend-protocol: http
    # TODO: Fill in with the ARN of your certificate.
    service.beta.kubernetes.io/aws-load-balancer-tls-cert: arn:aws:acm:{region}:{user id}:certificate/{id}
    # Only run TLS on the port named "https" below.
    service.beta.kubernetes.io/aws-load-balancer-tls-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 がインストールされていることを前提としています。

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 will be 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 をリスニングルし、ALB で TLS を終了して、HTTP を HTTPS にリダイレクトします。

2.    ingressservice.yaml ファイルを適用するには、次のコマンドを実行します。

$ kubectl create -f ingressservice.yaml

カスタムドメインをロードバランサーの 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公式
AWS公式更新しました 1年前
コメントはありません

関連するコンテンツ