正式なドキュメントは英語版であり、この日本語訳はAI支援翻訳により作成された参考用のものです。日本語訳の一部の内容は人間によるレビューがまだ行われていないため、翻訳のタイミングにより英語版との間に差異が生じることがあります。最新かつ正確な情報については、英語版をご参照ください。

GitLab Pagesチャートの使用

  • プラン: Free、Premium、Ultimate
  • 提供形態: GitLab Self-Managed

gitlab-pagesサブチャートは、GitLabプロジェクトから静的ウェブサイトを提供するためのデーモンを提供します。

要件

このチャートは、完全なGitLabチャートの一部として、またはこのチャートがデプロイされるKubernetesクラスタから到達可能な外部サービスとして提供される、Workhorseサービスへのアクセスに依存します。

設定

gitlab-pagesチャートは、次のように設定されます: グローバル設定チャートの設定

グローバル設定

いくつかの一般的なグローバル設定は、チャート間で共有されます。詳細については、グローバルドキュメントを参照してください。

チャートの設定

以下の2つのセクションの表には、helm installフラグを使用して--setコマンドに指定できる、チャートのすべての可能な設定が含まれています。

一般設定

パラメータデフォルト説明
affinity{}ポッドの割り当てのアフィニティルール
annotationsポッドの注釈
common.labels{}このチャートによって作成されたすべてのオブジェクトに適用される補足ラベル。
deployment.strategy{}デプロイメントで使用される更新戦略を設定できます。指定されていない場合、クラスタのデフォルトが使用されます。
extraEnv公開する追加の環境変数のリスト
extraEnvFrom公開する他のデータソースからの追加の環境変数のリスト
hpa.behavior{scaleDown: {stabilizationWindowSeconds: 300 }}動作には、アップスケールとダウンスケール動作の仕様が含まれています(autoscaling/v2beta2以上が必要です)。
hpa.customMetrics[]カスタムメトリクスには、必要なレプリカ数を計算するために使用する仕様が含まれています(targetAverageUtilizationで設定された平均CPU使用率のデフォルトの使用をオーバーライドします)。
hpa.cpu.targetTypeAverageValueオートスケールCPUターゲットタイプを設定します。UtilizationまたはAverageValueのいずれかである必要があります
hpa.cpu.targetAverageValue100mオートスケールCPUターゲット値を設定します
hpa.cpu.targetAverageUtilizationオートスケールCPUターゲット使用率を設定します
hpa.memory.targetTypeオートスケールメモリターゲットタイプを設定します。UtilizationまたはAverageValueのいずれかである必要があります
hpa.memory.targetAverageValueオートスケールメモリターゲット値を設定します
hpa.memory.targetAverageUtilizationオートスケールメモリターゲット使用率を設定します
hpa.minReplicas1レプリカの最小数
hpa.maxReplicas10レプリカの最大数
hpa.targetAverageValue非推奨 オートスケールCPUターゲット値を設定します
image.pullPolicyIfNotPresentGitLabイメージのプルポリシー
image.pullSecretsイメージリポジトリのシークレット
image.repositoryregistry.gitlab.com/gitlab-org/build/cng/gitlab-pagesGitLab Pagesイメージリポジトリ
image.tagイメージタグ
init.image.repositoryinitコンテナイメージ
init.image.taginitコンテナイメージタグ
init.containerSecurityContextinitコンテナ固有のsecurityContext
init.containerSecurityContext.allowPrivilegeEscalationfalseinitコンテナ固有: プロセスがその親プロセスよりも多くの特権を取得できるかどうかを制御します
init.containerSecurityContext.runAsNonRoottrueinitコンテナ固有: コンテナを非rootユーザーで実行するかどうかを制御します
init.containerSecurityContext.capabilities.drop[ "ALL" ]initコンテナ固有: コンテナのLinuxケイパビリティを削除します
keda.enabledfalseHorizontalPodAutoscalersの代わりにKEDA ScaledObjectsを使用します
keda.pollingInterval30各トリガーをチェックする間隔
keda.cooldownPeriod300リソースを0にスケールバックする前に、最後トリガーがアクティブと報告されてから待機する期間
keda.minReplicaCounthpa.minReplicasKEDAがリソースをスケールダウンするレプリカの最小数。
keda.maxReplicaCounthpa.maxReplicasKEDAがリソースをスケールアップするレプリカの最大数。
keda.fallbackKEDAfallback設定については、ドキュメントを参照してください
keda.hpaNamekeda-hpa-{scaled-object-name}KEDAが作成するHPAリソースの名前。
keda.restoreToOriginalReplicaCountScaledObjectが削除された後、ターゲットリソースを元のレプリカ数にスケールバックするかどうかを指定します
keda.behaviorhpa.behaviorアップスケールとダウンスケール動作の仕様。
keda.triggersターゲットリソースのスケールをアクティブにするトリガーのリスト。hpa.cpuおよびhpa.memoryから計算されたトリガーがデフォルトです
metrics.enabledtrueメトリクスエンドポイントをスクレイプできるようにするかどうか
metrics.port9235メトリクスエンドポイントのポート
metrics.path/metricsメトリクスエンドポイントのパス
metrics.serviceMonitor.enabledfalsePrometheus Operatorがメトリクスのスクレイピングを管理できるようにServiceMonitorを作成するかどうか。これを有効にすると、prometheus.ioスクレイピングアノテーションが削除されることに注意してください
metrics.serviceMonitor.additionalLabels{}ServiceMonitorに追加する追加のラベル
metrics.serviceMonitor.endpointConfig{}ServiceMonitorの追加のエンドポイント設定
metrics.annotations非推奨 明示的なメトリクス注釈を設定します。テンプレートコンテンツに置き換えられました。
metrics.tls.enabledfalseメトリクスエンドポイントのTLSが有効
metrics.tls.secretName{Release.Name}-pages-metrics-tlsメトリクスエンドポイントのTLS証明書とキーのシークレット
priorityClassNameポッドに割り当てられるPriority class
podLabels追加のポッドラベル。セレクターには使用されません。
resources.requests.cpu900mGitLab Pagesの最小CPU
resources.requests.memory2GGitLab Pagesの最小メモリ
securityContext.fsGroup1000ポッドの起動に使用されるグループID
securityContext.runAsUser1000ポッドの起動に使用されるユーザーID
securityContext.fsGroupChangePolicyボリュームの所有権と権限を変更するためのポリシー(Kubernetes 1.23が必要です)
securityContext.seccompProfile.typeRuntimeDefault使用するSeccompプロファイル
containerSecurityContextコンテナの起動時に適用されるsecurityContextをオーバーライドする
containerSecurityContext.runAsUser1000コンテナの起動に使用される特定のセキュリティコンテキストユーザーIDを上書きできるようにします
containerSecurityContext.allowPrivilegeEscalationfalseコンテナのプロセスがその親プロセスよりも多くの特権を取得できるかどうかを制御します
containerSecurityContext.runAsNonRoottrueコンテナを非rootユーザーで実行するかどうかを制御します
containerSecurityContext.capabilities.drop[ "ALL" ]GitalyコンテナのLinuxケイパビリティを削除します
service.externalPort8090GitLab Pagesの公開ポート
service.internalPort8090GitLab Pagesの内部ポート
service.namegitlab-pagesGitLab Pagesサービス名
service.annotationsすべてのPagesサービスの注釈。
service.primary.annotationsプライマリサービスのみの注釈。
service.metrics.annotationsメトリクスサービスのみの注釈。
service.customDomains.annotationsカスタムドメインサービスのみの注釈。
service.customDomains.typeLoadBalancerカスタムドメインの処理用に作成されたサービスの種類
service.customDomains.internalHttpsPort8091PagesデーモンがHTTPSリクエストをリッスンするポート
service.customDomains.internalHttpsPort8091PagesデーモンがHTTPSリクエストをリッスンするポート
service.customDomains.nodePort.httpHTTP接続用に開かれるノードポート。service.customDomains.typeNodePortの場合にのみ有効です
service.customDomains.nodePort.httpsHTTPS接続用に開かれるノードポート。service.customDomains.typeNodePortの場合にのみ有効です
service.sessionAffinityNoneセッションアフィニティの種類。ClientIPまたはNoneのいずれかである必要があります(これは、クラスタ内から発信されたトラフィックにのみ意味があります)。
service.sessionAffinityConfigセッションアフィニティ設定。service.sessionAffinity == ClientIPの場合、デフォルトのセッションスティッキー時間は3時間(10800)です
serviceAccount.annotations{}ServiceAccount注釈
serviceAccount.automountServiceAccountTokenfalseデフォルトのServiceAccountアクセストークンをポッドにマウントするかどうかを示します
serviceAccount.createfalseServiceAccountを作成するかどうかを示します
serviceAccount.enabledfalseServiceAccountを使用するかどうかを示します
serviceAccount.nameServiceAccountの名前。設定しない場合、チャートの完全な名前が使用されます
serviceLabels{}補足サービスラベル
tolerations[]ポッド割り当てのTolerationラベル

Pages固有の設定

パラメータデフォルト説明
artifactsServerTimeout10アーティファクトサーバーへのプロキシリクエストのタイムアウト(秒単位)。
artifactsServerUrlアーティファクトリクエストのプロキシ先となるAPI URL。
extraVolumeMounts追加する追加ボリュームマウントのリスト
extraVolumes作成する追加ボリュームのリスト
gitlabCache.cleanupint参照: Pagesグローバル設定
gitlabCache.expiryint参照: Pagesグローバル設定
gitlabCache.refreshint参照: Pagesグローバル設定
gitlabClientHttpTimeoutGitLab API HTTPクライアント接続タイムアウト(秒単位)。
gitlabClientJwtExpiryJWTトークンの有効期限(秒単位)。
gitlabRetrieval.intervalint参照: Pagesグローバル設定
gitlabRetrieval.retriesint参照: Pagesグローバル設定
gitlabRetrieval.timeoutint参照: Pagesグローバル設定
gitlabServerGitLabサーバーFQDN
headers[]各応答とともにクライアントに送信する必要がある追加のHTTPヘッダーを指定します。複数のヘッダーを配列として指定でき、ヘッダーと値は1つの文字列として記述します(例: ['my-header: myvalue', 'my-other-header: my-other-value'])。
insecureCiphersfalse3DESやRC4などの脆弱な暗号を含む可能性のある、暗号スイートのデフォルトリストを使用します。
internalGitlabServerAPIリクエストに使用される内部GitLabサーバー
logFormatjsonログ出力形式
logVerbosefalse詳細ログ
maxConnectionsHTTP、HTTPS、またはプロキシリスナーへの同時接続数の制限。
maxURILengthURIの長さを制限します。無制限の場合は0。デフォルトの設定については、GitLab Pagesグローバル設定max_uri_lengthを参照してください
propagateCorrelationId受信リクエストヘッダーX-Request-IDに既存の相関IDが存在する場合、それを再利用します
redirectHttpfalseHTTPからHTTPSにページをリダイレクトします。
sentry.enabledfalseSentryレポートを有効にします
sentry.dsnSentryクラッシュレポートの送信先アドレス
sentry.environmentSentryクラッシュレポートの環境
serverShutdowntimeout30sGitLab Pagesサーバーのシャットダウンタイムアウト(秒単位)
statusUriステータスページのURIパス
tls.minVersion最小SSL/TLSバージョンを指定します
tls.maxVersion最大SSL/TLSバージョンを指定します
useHTTPProxyfalseGitLab Pagesがリバースプロキシの背後にある場合は、このオプションを使用します。
useProxyV2falsePROXYv2プロトコルを利用するためにHTTPSリクエストを強制します。
zipCache.cleanupint参照: Zip Serving and Cache Configuration
zipCache.expirationint参照: Zip Serving and Cache Configuration
zipCache.refreshint参照: Zip Serving and Cache Configuration
zipOpenTimeoutint参照: Zip Serving and Cache Configuration
zipHTTPClientTimeoutint参照: Zip Serving and Cache Configuration
rateLimitSourceIP参照: GitLab Pagesレート制限
rateLimitSourceIPBurst参照: GitLab Pagesレート制限
rateLimitDomain参照: GitLab Pagesレート制限
rateLimitDomainBurst参照: GitLab Pagesレート制限
rateLimitTLSSourceIP参照: GitLab Pagesレート制限
rateLimitTLSSourceIPBurst参照: GitLab Pagesレート制限
rateLimitTLSDomain参照: GitLab Pagesレート制限
rateLimitTLSDomainBurst参照: GitLab Pagesレート制限
rateLimitSubnetsAllowList参照: GitLab Pagesレート制限
serverReadTimeout5s参照: GitLab Pagesグローバル設定
serverReadHeaderTimeout1s参照: GitLab Pagesグローバル設定
serverWriteTimeout5m参照: GitLab Pagesグローバル設定
serverKeepAlive15s参照: GitLab Pagesグローバル設定
authTimeout5s参照: GitLab Pagesグローバル設定
authCookieSessionTimeout10m参照: GitLab Pagesグローバル設定

ingressを設定する

このセクションでは、GitLab Pages Ingressを制御します。

名前デフォルト説明
apiVersion文字列apiVersionフィールドで使用する値。
annotations文字列このフィールドは、Kubernetes Ingressの標準annotationsと完全に一致します。
configureCertmanagerブール値falseIngress注釈cert-manager.io/issuerおよびacme.cert-manager.io/http01-edit-in-placeを切り替えます。ワイルドカード証明書の取得にはDNS01ソルバーを備えたcert-manager Issuerが必要であり、このチャートによってデプロイされたIssuerはHTTP01ソルバーのみを提供するため、cert-managerを介したGitLab PagesのTLS証明書の取得は無効になっています。詳細については、GitLab PagesのTLS要件を参照してください。
enabledブール値サービスでサポートするIngressオブジェクトを作成するかどうかを制御するための設定。設定されていない場合、global.ingress.enabled設定が使用されます。
tls.enabledブール値falseに設定すると、PagesサブチャートのTLSが無効になります。これは、ingress-levelでTLS終端を使用できない場合(TLS終端プロキシがIngressコントローラーの前にある場合など)に特に役立ちます。
tls.secretName文字列ページURIの有効な証明書とキーを含むKubernetes TLSシークレットの名前。設定されていない場合、代わりにglobal.ingress.tls.secretNameが使用されます。設定されていないデフォルト。

チャート設定例

extraVolumes

extraVolumesを使用すると、チャート全体の追加ボリュームを設定できます。

extraVolumesの使用例を以下に示します:

extraVolumes: |
  - name: example-volume
    persistentVolumeClaim:
      claimName: example-pvc

extraVolumeMounts

extraVolumeMountsを使用すると、チャート全体のすべてのコンテナで追加のvolumeMountsを設定できます。

extraVolumeMountsの使用例を以下に示します:

extraVolumeMounts: |
  - name: example-volume
    mountPath: /etc/example

networkpolicyを設定する

このセクションでは、NetworkPolicyを制御します。この設定はオプションで、ポッドのエグレスとイングレスを特定エンドポイントに制限するために使用されます。

名前デフォルト説明
enabledブール値falseこの設定はNetworkPolicyを有効にします
ingress.enabledブール値falsetrueに設定すると、Ingressネットワークポリシーがアクティブになります。ルールが指定されていない限り、これによりすべてのIngress接続がブロックされます。
ingress.rules配列[]Ingressポリシーのルール。詳細については、https://kubernetes.io/docs/concepts/services-networking/network-policies/#the-networkpolicy-resourceおよび以下の例を参照してください
egress.enabledブール値falsetrueに設定すると、Egressネットワークポリシーがアクティブになります。ルールが指定されていない限り、これによりすべてのエグレス接続がブロックされます。
egress.rules配列[]エグレスポリシーのルール。詳細については、https://kubernetes.io/docs/concepts/services-networking/network-policies/#the-networkpolicy-resourceおよび以下の例を参照してください

ネットワークポリシーの例

gitlab-pagesサービスには、ポート80および443のIngress接続と、デフォルトのworkhorseポート8181へのさまざまなエグレス接続が必要です。この例では、次のネットワークポリシーを追加します:

  • Ingressリクエストを許可:
    • nginx-ingressポッドからポート8090
    • prometheusポッドからポート9235
  • エグレスリクエストを許可:
    • kube-dnsのポート53
    • webserviceポッドからポート8181
    • S3のAWS VPCエンドポイントなどのエンドポイントから、ポート443172.16.1.0/24

提供されている例は単なる例であり、完全ではない可能性があることに注意してください

この例は、kube-dnsがネームスペースkube-systemに、prometheusがネームスペースmonitoringに、nginx-ingressがネームスペースnginx-ingressにデプロイされたという前提に基づいています。

networkpolicy:
  enabled: true
  ingress:
    enabled: true
    rules:
      - from:
          - namespaceSelector:
              matchLabels:
                kubernetes.io/metadata.name: monitoring
            podSelector:
              matchLabels:
                app: prometheus
                component: server
                release: gitlab
        ports:
          - port: 9235
      - from:
          - namespaceSelector:
              matchLabels:
                kubernetes.io/metadata.name: nginx-ingress
            podSelector:
              matchLabels:
                app: nginx-ingress
                component: controller
        ports:
          - port: 8090
  egress:
    enabled: true
    rules:
      - to:
          - namespaceSelector:
              matchLabels:
                kubernetes.io/metadata.name: kube-system
            podSelector:
              matchLabels:
                k8s-app: kube-dns
        ports:
          - port: 53
            protocol: UDP
      - to:
          - ipBlock:
              cidr: 172.16.1.0/24
        ports:
          - port: 443
      - to:
          - podSelector:
              matchLabels:
                app: webservice
        ports:
          - port: 8181

GitLab PagesへのTLSアクセス

GitLab Pages機能へのTLSアクセスを実現するには、次の手順に従ってください:

  1. この形式でGitLab Pagesドメイン専用のワイルドカード証明書を作成します: *.pages.<yourdomain>

  2. Kubernetesでシークレットを作成します:

    kubectl create secret tls tls-star-pages-<mysecret> --cert=<path/to/fullchain.pem> --key=<path/to/privkey.pem>
  3. このシークレットを使用するようにGitLab Pagesを設定します:

    gitlab:
      gitlab-pages:
        ingress:
          tls:
            secretName: tls-star-pages-<mysecret>
  4. *.pages.<yourdomaindomain>を指す名前で、DNSプロバイダーにDNSエントリを作成します。

ワイルドカードDNSのないPagesドメイン

GitLab Pagesは、一度に1つのURIスキームのみをサポートします: ワイルドカードDNSを使用するか、ワイルドカードDNSを使用しないかのいずれかです。namespaceInPathを有効にすると、既存のGitLab Pages Webサイトには、ワイルドカードDNSなしで、ドメイン上でのみアクセスできます。

  1. グローバルなPages設定でnamespaceInPathを有効にします。

    global:
      pages:
        namespaceInPath: true
  2. pages.<yourdomaindomain>という名前で、お使いのDNSプロバイダーにエントリを作成し、ロードバランサーを指すようにします。

ワイルドカードDNSなしのGitLab PagesドメインへのTLSアクセス

  1. この形式で、GitLab Pagesドメインの証明書を作成します: pages.<yourdomain>

  2. Kubernetesでシークレットを作成します:

    kubectl create secret tls tls-star-pages-<mysecret> --cert=<path/to/fullchain.pem> --key=<path/to/privkey.pem>
  3. このシークレットを使用するようにGitLab Pagesを設定します:

    gitlab:
      gitlab-pages:
        ingress:
          tls:
            secretName: tls-star-pages-<mysecret>

アクセス制御の設定

  1. グローバルなPages設定でaccessControlを有効にします。

    global:
      pages:
        accessControl: true
  2. オプション。TLSアクセスが構成されている場合は、GitLab PagesのシステムOAuthアプリケーションのリダイレクトURIを更新して、HTTPSプロトコルを使用してください。

GitLab PagesはOAuthアプリケーションを更新せず、デフォルトのauthRedirectUrihttps://pages.<yourdomaindomain>/projects/authに更新されます。プライベートのPagesサイトにアクセス中に「リダイレクトURIが無効です」というエラーが発生した場合は、GitLab PagesのシステムOAuthアプリケーションのリダイレクトURIをhttps://pages.<yourdomaindomain>/projects/authに更新してください。

レート制限

サービス拒否(DoS)攻撃のリスクを最小限に抑えるために、レート制限を適用できます。詳細なレート制限のドキュメントをご利用いただけます。

特定のIP範囲(サブネット)がすべてのレート制限を回避できるようにするには、次の手順に従います:

  • rateLimitSubnetsAllowList: すべてのレート制限を回避させるIP範囲(サブネット)を指定する許可リストを設定します。

レート制限のサブネット許可リストを設定する

charts/gitlab/charts/gitlab-pages/values.yamlで、IP範囲(サブネット)を持つ許可リストを設定します:

gitlab:
  gitlab-pages:
    rateLimitSubnetsAllowList:
     - "1.2.3.4/24"
     - "2001:db8::1/32"

KEDAの設定

このkedaセクションでは、通常のHorizontalPodAutoscalersの代わりにKEDA ScaledObjectsのインストールを有効にします。この設定はオプションであり、カスタムまたは外部メトリクスに基づいてオートスケールが必要な場合に使用できます。

ほとんどの設定は、該当する場合、hpaセクションで設定された値にデフォルト設定されています。

以下が当てはまる場合、hpaセクションで設定されたCPUとメモリのしきい値に基づいて、CPUとメモリのトリガーが自動的に追加されます:

  • triggersが設定されていません。
  • 対応するrequest.cpu.requestまたはrequest.memory.request設定も、ゼロ以外の値に設定されます。

トリガーが設定されていない場合、ScaledObjectは作成されません。

これらの設定の詳細については、KEDAのドキュメントを参照してください。

名前デフォルト説明
enabledブール値falseHorizontalPodAutoscalersの代わりにKEDA ScaledObjectsを使用します
pollingInterval整数30各トリガーをチェックする間隔
cooldownPeriod整数300最後のアクティブとレポートされたトリガーの後に、リソースを0にスケールバックするまで待機する期間
minReplicaCount整数hpa.minReplicasKEDAがリソースをスケールダウンする最小レプリカ数。
maxReplicaCount整数hpa.maxReplicasKEDAがリソースをスケールアップする最大レプリカ数。
fallbackマップKEDAのフォールバックの設定については、ドキュメントを参照してください
hpaName文字列keda-hpa-{scaled-object-name}KEDAが作成するHPAリソースの名前。
restoreToOriginalReplicaCountブール値ScaledObjectが削除された後、ターゲットリソースを元のレプリカ数にスケールバックするかどうかを指定します
behaviorマップhpa.behaviorアップスケールとダウンスケール動作の仕様。
triggers配列ターゲットリソースのスケーリングをアクティブにするトリガーのリスト。hpa.cpuおよびhpa.memoryからコンピューティングされたトリガーにデフォルト設定されます

serviceAccount

このセクションでは、ServiceAccountを作成する必要があるかどうか、およびデフォルトのアクセストークンをポッドにマウントする必要があるかどうかを制御します。

名前デフォルト説明
annotationsマップ{}ServiceAccountの注釈。
automountServiceAccountTokenブール値falseの設定は、デフォルトのServiceAccountアクセストークンをポッドにマウントする必要があるかどうかを制御します。これは、特定のサイドカーが正常に機能するために必要という場合(Istioなど)を除き、有効にしないようにしてください。
createブール値falseServiceAccountを作成するかどうかを示します。
enabledブール値falseServiceAccountを使用するかどうかを示します。
name文字列ServiceAccountの名前。設定しない場合、チャートのフルネームが使用されます。

アフィニティ

詳細については、affinityを参照してください。