Help us improve the AWS re:Post Knowledge Center by sharing your feedback in a brief survey. Your input can influence how we create and update our content to better support your AWS journey.
TLS 証明書を使用して Amazon EKS アプリケーションの HTTPS 接続を有効にするにはどうすればよいですか?
TLS 証明書を使用して Amazon Elastic Kubernetes Service (Amazon EKS) アプリケーションの HTTPS 接続を有効にしたいと考えています。
簡単な説明
Amazon EKS アプリケーションの HTTPS 接続を有効にするには、次のタスクを実行します。
- カスタムドメインの有効な TLS 証明書を入手します。
- ロードバランサーサービスタイプを使用して Kubernetes サービスを公開するか、AWS Load Balancer Controller を使用して Kubernetes イングレスオブジェクトを公開します。
- カスタムドメインをロードバランサーの DNS に関連付けます。
解決策
カスタムドメインの有効な TLS 証明書を取得する
次の手順を実行して、カスタムドメインの有効な TLS 証明書を取得します。
-
カスタムドメインのAWS Certificate Manager (ACM) 公開証明書をリクエストするか、独自の TLS 証明書を ACM にアップロードします。
-
ロードバランサーの HTTPS リスナーで使用する証明書の ARN を特定します。
-
次のコマンドを実行し、サンプルの NGINX デプロイを作成します。
$ kubectl create deploy web --image=nginx --port 80 --replicas=3 -
次のコマンドを実行して、Kubernetes ポッド が Amazon EKS クラスターにデプロイされていることを確認します。
$ kubectl get pods -l app=web注: ポッドには app=webというラベルが付いています。このラベルをサービスオブジェクトのセレクタとして使用し、一連のポッドを特定できます。
ロードバランサーサービスタイプを使用して Kubernetes サービスを公開する
**注:**イングレスオブジェクトを使用してアプリケーションを公開するには、「イングレスオブジェクトを使用して Kubernetesサービスを公開する」セクションに進んでください。
次の手順を実行して、ロードバランサーサービスタイプを使用して Kubernetes サービスを公開します。
-
サービスタイプ 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 -
アノテーション service.beta.kubernetes.io/aws-load-balancer-tls-cert を編集して ACM の ARN を含めます。
-
次のコマンドを実行して、loadbalancer.yaml ファイルを適用します。
$ kubectl create -f loadbalancer.yaml -
「カスタムドメインをロードバランサーの DNS に関連付ける」セクションに進んでください。
イングレスオブジェクトを使用して Kubernetes サービスを公開する
注: 以下の解決策では、Amazon EKS クラスターに AWS Load Balancer Controller がインストールされていることを前提としています。詳細については、GitHub ウェブサイトの「aws-load-balancer-controller」を参照してください。
イングレスオブジェクトを使用して Kubernetes サービスを公開するには、次の手順を実行します。
- 次の例に基づいて、NodePort タイプの Kubernetes サービスを作成します。
**注:**前述のイングレス・マニフェストは HTTP と HTTPS でリッスンし、Application Load Balancer で TLS を終了して HTTP を HTTPS にリダイレクトします。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 - ingressservice.yaml ファイルを適用するには、次のコマンドを実行します。
$ kubectl create -f ingressservice.yaml
カスタムドメインをロードバランサーの DNS に関連付ける
カスタムドメインをロードバランサーの DNS に関連付けるには、次の手順を実行します。
-
次のコマンドを実行して、LoadBalancer タイプのサービスの DNS URL を返すように設定します。
$ kubectl get service -
Ingressタイプのサービスの DNS URL を返すには、次のコマンドを実行します。
$ kubectl get ingress/web-nginx-ingress -
ウェブブラウザで、次の HTTPS プロトコルを使用してカスタムドメインをテストします。
https://yourdomain.com
- トピック
- Containers
- 言語
- 日本語
