外部 NTP サーバーを構成する

このページでは、Google Distributed Cloud(GDC)エアギャップ アプライアンス用に外部 NTP サーバーを構成する方法について説明します。

これらの手順は、アプライアンスを外部タイムソースと同期する場合にのみ必要です。

始める前に

アプライアンスを外部 NTP サーバーと同期するには、デバイスを構成してソフトウェアをインストールします。

NTP リレーを構成する

  1. GDC エアギャップ アプライアンスが NTP サーバーにアクセスするために使用する必要がある IP アドレスを特定します。トラフィックを許可するようにファイアウォール ルールを調整する必要がある場合があります。

  2. ルート kubeconfig を使用して、管理プレーン クラスタの ntprelay CR を編集し、upstreamServers セクションを追加します。

    kubectl edit ntprelay bi-ntp-relay -n gpc-system
    ntprelay.system.private.gdc.goog/bi-ntp-relay edited
    kubectl get ntprelay bi-ntp-relay -n gpc-system -oyaml
    

    生成された YAML には、次の例に示すように、IP を含む更新された .spec セクションが含まれています。

    apiVersion: system.private.gdc.goog/v1alpha1
    kind: NTPRelay
    metadata:
      creationTimestamp: "2025-05-16T08:44:21Z"
      generation: 2
      name: bi-ntp-relay
      namespace: gpc-system
      resourceVersion: "10871409"
      uid: 6cde8e65-791c-4bc6-9a8b-d5c9bf103f8b
    spec:
      upstreamServers:
      - 192.0.2.030
    
  3. 各ノードの時刻を確認します。

    同期に 3 分間待ってから、ルート kubeconfig を使用してコントロール プレーン クラスタで次のコマンドを実行します。

    kubectl get pods -l app.kubernetes.io/name=ntp -n ntp-system -o name | xargs -P 0 -I {} kubectl exec {} -n ntp-system -- date; echo
    

    出力には、各ノードの時刻が NTP サーバーの時刻と一致して表示されます。出力は次のようになります。

    Defaulted container "ntp-image" out of: ntp-image, ntp-node-exporter
    Defaulted container "ntp-image" out of: ntp-image, ntp-node-exporter
    Defaulted container "ntp-image" out of: ntp-image, ntp-node-exporter
    Thu Nov  6 19:39:34 UTC 2025
    Thu Nov  6 19:39:34 UTC 2025
    Thu Nov  6 19:39:34 UTC 2025
    

接続に関する問題をデバッグする

時間が一致しない場合は、root kubeconfig を使用してコントロール プレーン クラスタで次のコマンドを実行し、NTP サーバーへの接続をデバッグします。

kubectl get pods -l app.kubernetes.io/name=ntp -n ntp-system -o name | xargs -I {} kubectl exec {} -n ntp-system -- sh -c "chronyc sources -v; echo; chronyc ntpdata"; echo

正常な接続の出力は次のようになります。外部サーバーの IP は ^* で始まります。ソースのデータ(Remote address : 192.0.2.026 など)では、TX は送信されたパケットの量、RX は受信されたパケットの数です。RX が 0 の場合、接続の問題を示します。ファイアウォールをチェックして、NTP リクエストが通過しているかどうかを確認します。

  .-- Source mode  '^' = server, '=' = peer, '#' = local clock.
/ .- Source state '*' = current best, '+' = combined, '-' = not combined,
| /             'x' = may be in error, '~' = too variable, '?' = unusable.
||                                                 .- xxxx [ yyyy ] +/- zzzz
||      Reachability register (octal) -.           |  xxxx = adjusted offset,
||      Log2(Polling interval) --.      |          |  yyyy = measured offset,
||                                \     |          |  zzzz = estimated error.
||                                 |    |           \
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^* 192.0.2.026                   1   6    17    43   +286ns[  +36us] +/- 1160us
=? 192.0.2.029                 0   6     0     -     +0ns[   +0ns] +/-    0ns
=? 192.0.2.051                 0   6     0     -     +0ns[   +0ns] +/-    0ns
=? 192.0.2.059            0   6     0     -     +0ns[   +0ns] +/-    0ns

Remote address  : 192.0.2.026 (ACC03AF1)
Remote port     : 123
Local address   : 192.0.2.029 (0AA800D5)
Leap status     : Normal
Version         : 4
Mode            : Symmetric passive
Stratum         : 2
Poll interval   : 10 (1024 seconds)
Precision       : -25 (0.000000030 seconds)
Root delay      : 0.000381 seconds
Root dispersion : 0.000397 seconds
Reference ID    : ACC03BDF ()
Reference time  : Thu Nov 06 19:36:31 2025
Offset          : -0.000002443 seconds
Peer delay      : 0.000202604 seconds
Peer dispersion : 0.000000053 seconds
Response time   : 0.000097758 seconds
Jitter asymmetry: -0.37
NTP tests       : 111 111 1111
Interleaved     : No
Authenticated   : No
TX timestamping : Daemon
RX timestamping : Kernel
Total TX        : 67
Total RX        : 67
Total valid RX  : 67
Total good RX   : 67