> ## Documentation Index
> Fetch the complete documentation index at: https://docs.ale.run/llms.txt
> Use this file to discover all available pages before exploring further.

# TLS証明書とIngressの適用

> Cert Managerを活用したSSL/TLS証明書の適用ガイドです。

<Note>
  `ale`でデプロイされたサービスのプレビューURLとカスタムドメインにはTLS証明書が自動的に適用されます。
</Note>

***

## ClusterIssuer生成と発行

<Steps>
  <Step title="証明書生成スクリプトで使用される値を環境変数として設定してください。">
    ```bash theme={null}
    export CLOUDFLARE_DOMAIN=<Cloudflareドメイン>
    export CLOUDFLARE_EMAIL=<Cloudflareアカウントのメールアドレス>
    export CLOUDFLARE_API_TOKEN=<Cloudflare APIトークン>
    export ACME_EMAIL=<証明書発行用メールアドレス>
    ```

    <Info>
      Cloudflare APIトークンはDNS編集権限が付与されている必要があります。
    </Info>
  </Step>

  <Step title="次のコマンドでクラスター証明書生成ツールをインストールします。">
    ```bash theme={null}
    cat <<EOF | kubectl apply -f -
    apiVersion: v1
    kind: Secret
    metadata:
      name: cloudflare-api-token-secret
      namespace: cert-manager
    type: Opaque
    stringData:
      api-token: $CLOUDFLARE_API_TOKEN
    ---
    apiVersion: cert-manager.io/v1
    kind: ClusterIssuer
    metadata:
      name: ale-issuer
      namespace: cert-manager
    spec:
      acme:
        email: $ACME_EMAIL
        server: https://acme-v02.api.letsencrypt.org/directory
        privateKeySecretRef:
          name: ale-issuer
        solvers:
          - http01:
              ingress:
                class: nginx
          - dns01:
              cloudflare:
                email: $CLOUDFLARE_EMAIL
                apiTokenSecretRef:
                  name: cloudflare-api-token-secret
                  key: api-token
            selector:
              dnsZones:
                - $CLOUDFLARE_DOMAIN
    EOF
    ```
  </Step>

  <Step title="次のコマンドを実行して証明書を発行します。">
    ```bash theme={null}
    cat <<EOF | kubectl apply -f -
    apiVersion: cert-manager.io/v1
    kind: Certificate
    metadata:
      name: ale-app-tls
      namespace: cert-manager
    spec:
      dnsNames:
        - "*.$CLOUDFLARE_DOMAIN"
      issuerRef:
        kind: ClusterIssuer
        name: ale-issuer
      secretName: ale-app-tls
    EOF
    ```
  </Step>
</Steps>

## イングレスのセットアップ

<Steps>
  <Step title="次のコマンドでクラスター証明書生成ツールとIngressをインストールします。">
    ```bash theme={null}
    cat <<EOF | kubectl apply -f -
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: ale
      namespace: ale
      annotations:
        nginx.ingress.kubernetes.io/whitelist-source-range: 0.0.0.0/0
        cert-manager.io/cluster-issuer: ale-issuer
    spec:
      ingressClassName: nginx
      tls:
        - hosts:
            - app.$CLOUDFLARE_DOMAIN
          secretName: ale-controller-tls
      rules:
        - host: app.$CLOUDFLARE_DOMAIN
          http:
            paths:
              - path: /
                pathType: Prefix
                backend:
                  service:
                    name: ale-controller
                    port:
                      number: 9001
    EOF
    ```
  </Step>

  <Step title="以下のコマンドで証明書の生成と反映を確認し、正常ならSTATEがvalidと表示されます。">
    ```bash theme={null}
    kubectl get order -n ale \
      | awk '/ale-/{print $1}' \
      | xargs kubectl get order -n ale
    ```

    ```bash theme={null}
    NAME                              STATE   AGE
    ale-controller-tls-1-1997619857   valid   103s
    ```
  </Step>

  <Step title="以下のURLにアクセスできれば、証明書が正しく反映されています。アクセスできない場合は、Cert ManagerのPodやCluster Issuerの状態を確認してください。">
    ```bash theme={null}
    https://app.[Cloudflare_ドメイン]
    ```
  </Step>

  <Step
    title="管理者アカウントを作成し、インストールを完了してください。
"
  >
    <Frame>
      <img className="block rounded-md" src="https://files.cloudtype.io/ale-docs/setup/ec2/images/en/04_22.png" />
    </Frame>

    <Note>
      プレビュードメインフィールドには接続したルートドメインを入力します。
    </Note>
  </Step>
</Steps>

## クラスターネットワーク設定

<Frame>
  <img className="block rounded-md" src="https://files.cloudtype.io/ale-docs/setup/ec2/images/ja/04_23.png" />
</Frame>

> `運用システム>クラスター>設定タブ`のネットワークセクションに以下の値を入力してください。

* **プレビュードメイン**: ルートドメイン
* **HTTPS使用**
  * **チェック**: インターネット環境
  * **チェック解除**:イントラネット/閉域網環境
* **証明書シークレット名**: ale-app-tls
* **証明書シークレットネームスペース**: cert-manager
* **証明書発行者**: ale-issuer
* **Ingressクラス**: nginx
* **Ingress IP**: 空欄（自動認識）
* **ロードバランサータイプ**
  * ロードバランサー
  * ノードポート
* **Ingress/Egress帯域幅**: Mbps単位で入力

<Info>
  ダッシュボードの左上にあるスペース名をクリックすると、運用システムにアクセスできます。

  <Frame>
    <img className="block rounded-md" src="https://files.cloudtype.io/ale-docs/setup/ec2/images/ja/04_24.png" />
  </Frame>
</Info>

<Note>
  運用システムメニューは、運用システムへのアクセス権限を持つアカウントにのみ表示されます。
</Note>
