SSL証明書とコンテナ環境 (Docker, Kubernetes) での設定方法

SSL記事

Webアプリケーションの開発・運用において、コンテナ技術は非常に便利です。特に、DockerKubernetes を利用した環境では、SSL証明書を適切に設定することで、セキュアな通信を実現できます。本記事では、初心者向けにコンテナ環境でのSSL証明書の設定方法を分かりやすく解説します。


NordVPN

SSL証明書とは?

SSL(Secure Sockets Layer)証明書は、インターネット上の通信を暗号化する電子証明書です。現在では、SSLの後継規格であるTLS(Transport Layer Security) が主流ですが、一般的には「SSL証明書」と呼ばれています。

SSL証明書を導入することで、WebサイトやAPIエンドポイントへのアクセスが「https://」となり、データの暗号化・改ざん防止・サーバー認証を実現します。


Docker 環境での SSL 設定方法

1. Nginx + Docker で SSL 証明書を設定する

必要なファイルの準備

  • SSL証明書ファイル (cert.pem)
  • 秘密鍵ファイル (privkey.pem)
  • Nginx 設定ファイル (nginx.conf)
  • Dockerfile
  • docker-compose.yml (任意)

例: Nginx 設定ファイル (nginx.conf)

server {
    listen 443 ssl;
    server_name example.com;

    ssl_certificate /etc/nginx/ssl/cert.pem;
    ssl_certificate_key /etc/nginx/ssl/privkey.pem;

    location / {
        proxy_pass http://app:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

Dockerfile の設定

FROM nginx:latest
COPY nginx.conf /etc/nginx/conf.d/default.conf
COPY cert.pem /etc/nginx/ssl/cert.pem
COPY privkey.pem /etc/nginx/ssl/privkey.pem

コンテナの起動

docker build -t my-nginx .
docker run -d -p 443:443 my-nginx

確認

ブラウザや curl コマンドを使って、https://example.com にアクセスし、SSL証明書が正しく設定されているか確認します。


Kubernetes 環境での SSL 設定方法

1. Ingress Controller を利用した SSL 設定

Kubernetes では、Ingress を利用することで、複数のサービスに対してSSL証明書を簡単に設定できます。

必要なツール

  • Cert-Manager (Let’s Encrypt などの証明書自動発行・更新ツール)
  • NGINX Ingress Controller

証明書の設定手順

  1. Cert-Manager のインストール
kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v1.11.0/cert-manager.yaml
  1. Issuer の設定 (Let’s Encrypt の例)
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: letsencrypt-prod
spec:
  acme:
    server: https://acme-v02.api.letsencrypt.org/directory
    email: your-email@example.com
    privateKeySecretRef:
      name: letsencrypt-prod-secret
    solvers:
    - http01:
        ingress:
          class: nginx
  1. Ingress の設定例
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-app-ingress
  annotations:
    cert-manager.io/cluster-issuer: "letsencrypt-prod"
spec:
  tls:
  - hosts:
    - example.com
    secretName: example-com-tls
  rules:
  - host: example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: my-app
            port:
              number: 80
  1. 証明書の確認
kubectl describe certificate example-com-tls

Ingressを介してアクセスすることで、自動的にSSL証明書が適用され、HTTPS通信が可能になります。


SSL証明書設定時の注意点

  1. 秘密鍵の権限管理
    • DockerコンテナやKubernetesのSecretに保存する際、アクセス権限を最小限に設定します。
  2. 証明書の有効期限に注意
    • Cert-Managerを利用すると、自動更新が可能です。
    • 手動で設定する場合は、更新タイミングを忘れないようにしましょう。
  3. HTTPSリダイレクト設定
    • HTTPアクセスをHTTPSに強制リダイレクトすることで、より安全な通信を実現します。

まとめ

DockerやKubernetes環境でも、SSL証明書を適切に設定することで、安全な通信を実現できます。

  • Docker 環境では、Nginxコンテナを活用することで手軽にSSL対応が可能です。
  • Kubernetes 環境では、Ingress Controller と Cert-Manager を組み合わせることで、証明書の自動発行・更新も可能になります。

GetSSL.PRO では、コンテナ環境でも利用可能な高品質なSSL証明書を提供しています。セキュアなWebサービスの構築に、ぜひご活用ください!

タイトルとURLをコピーしました