GKE 1.23 で削除された Kubernetes Ingress ベータ版 API


このページには、オープンソースの Kubernetes 1.22 リリースのベータ版 Ingress API バージョンの非推奨と削除に関する情報が掲載されています。移行にさらに時間がかかることを考慮して、バージョン 1.23 までこの API が使用できるように、GKE ではバージョン 1.21 以前で作成されたクラスタを 1 回限り認める例外が作られました。バージョン 1.22 がサポート終了になる前に、クラスタを Ingress v1 API に移行する必要があります。

Kubernetes バージョン 1.22 で削除された非推奨の Ingress ベータ版 API は、ベータ版(v1beta1)から一般提供(v1)に移行した以前のベータ版 API です。一般提供の API は長期的な互換性の保証をしており、非推奨のベータ版 API の代わりに使用される必要があります。

既存のオブジェクトはすべて、一般提供の API を使用して操作できます。

Ingress(1.21 以前で作成されたクラスタでは 1.23 まで使用可能)

クラスタがバージョン 1.22 以降で作成された場合、Ingress のベータ版 API バージョン(extensions/v1beta1networking.k8s.io/v1beta1)は、バージョン 1.22 以降を実行している GKE クラスタには提供されなくなりました。

ただし、GKE バージョン 1.21 以前で作成され、パッチ バージョン 1.22.7-gke.300 以降で 1.22 にアップグレードされたクラスタの場合、クラスタがバージョン 1.23. にアップグレードされるまでベータ版 API バージョンを使用できます。これは、バージョン 1.22 のオープンソース Kubernetes から削除されるこれらの API バージョンの使用をやめ、クラスタを移行する時間を確保するための、古いクラスタに対する 1 回限りの例外です。

GKE バージョン 1.23 以降を実行しているクラスタでは、非推奨の Ingress ベータ版 API が提供されなくなります。これらの API バージョンを使用するマニフェストは適用できなくなります。以前に保持されたオブジェクトは引き続き機能し、1.23 にアップグレードする前と後で、新しい API バージョンを使用して表示および更新できます。

  • マニフェストと API クライアントを移行して、networking.k8s.io/v1 API バージョンを使用してください。
  • 一般提供の API バージョンの重要な変更点については、次の表をご覧ください。

    フィールド 変更
    spec.backend 名前が spec.defaultBackend に変わりました。
    backend serviceName 名前が service.name に変わりました。
    servicePort 数値バックエンドの servicePort フィールドの名前が service.port.number に変わりました。文字列バックエンドの servicePort フィールドの名前が service.port.name に変わりました。
    pathType 指定されたパスごとに必要になりました。値は PrefixExactImplementationSpecific のいずれかです。未定義の v1beta1 動作と一致させるには、ImplementationSpecific を使用します。

次のマニフェストは、v1v1beta1 で同じ Ingress を記述しています。

v1beta1 マニフェスト

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: example
spec:
  backend:
    serviceName: default-backend
    servicePort: 80
  rules:
  - http:
      paths:
      - path: /testpath
        backend:
          serviceName: test
          servicePort: 80

v1 マニフェスト

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: example
spec:
  defaultBackend:
    service:
      name: default-backend
      port:
        number: 80
  rules:
  - http:
      paths:
      - path: /testpath
        pathType: ImplementationSpecific
        backend:
          service:
            name: test
            port:
              number: 80

Google Cloud Observability が有効になっているクラスタに対して次のクエリを使用すると、Ingress v1beta1 API にアクセスするクライアントを特定できます。

resource.type="k8s_cluster"
resource.labels.cluster_name="$CLUSTER_NAME"
protoPayload.authenticationInfo.principalEmail:("system:serviceaccount" OR "@")
protoPayload.request.apiVersion=("extensions/v1beta1" OR "networking.k8s.io/v1beta1")
protoPayload.request.kind="Ingress"
NOT ("kube-system")

非推奨の API を使用しているクラスタを検索する

非推奨の API を使用しているクラスタは、非推奨に関する分析情報で確認できます。また、非推奨に関する分析情報では、どの API クライアントがクラスタ内で非推奨の API を呼び出しているのかなどの情報も表示できます。

監査ログを使用して、非推奨の API を呼び出しているクライアントを確認することもできます。

非推奨の API への書き込み呼び出しを行う API クライアントを特定する

Google Cloud Observability が有効になっているクラスタでは、次の管理アクティビティ監査ログクエリを使用すると、Google の管理外のユーザー エージェントによる非推奨の API の使用を確認できます。

resource.type="k8s_cluster"
labels."k8s.io/removed-release"="DEPRECATED_API_MINOR_VERSION"
protoPayload.authenticationInfo.principalEmail:("system:serviceaccount" OR "@")
protoPayload.authenticationInfo.principalEmail!~("system:serviceaccount:kube-system:")

DEPRECATED_API_MINOR_VERSION は、非推奨の API が削除されたマイナー バージョン(1.22 など)に置き換えます。

GKE クラスタに対して管理アクティビティ監査ログが自動的に有効になります。このクエリを使用して、非推奨の API への書き込み呼び出しを行っているユーザー エージェントがログに表示されます。

非推奨の API への読み取り呼び出しを行う API クライアントを特定する

デフォルトでは、監査ログには非推奨の API への書き込み呼び出しのみが表示されます。非推奨の API への読み取り呼び出しも表示するには、データアクセス監査ログを構成します。

手順に沿って、Google Cloud コンソールでデータアクセスの監査ログを構成します。Google Cloud コンソールで、Kubernetes Engine API を選択します。情報パネルの [ログタイプ] タブで、Admin ReadData Read を選択します。

これらのログを有効にすると、元のクエリを使用して、非推奨の API に対する読み取り呼び出しと書き込み呼び出しの両方を確認できます。

サードパーティ コンポーネントのアップグレード

非推奨に関する分析情報に、クラスタ内の非推奨の API を呼び出すサードパーティ エージェントの結果が表示されます。

これらの分析情報を解決するには、次の手順を試してください。

  1. サードパーティ ソフトウェアのプロバイダに問い合わせて、最新バージョンを確認します。
  2. サードパーティ ソフトウェアを最新バージョンにアップグレードします。ソフトウェアをアップグレードできない場合は、GKE を非推奨の API を削除したバージョンにアップグレードするとサービスが停止するかどうかをテストする必要があります。

本番環境クラスタをアップグレードする前に、ステージング クラスタでこのアップグレードと GKE バージョンのアップグレードを行って、中断が発生しないかどうかモニタリングすることをおすすめします。

1.23 へのアップグレードの準備

ユーザーは API オブジェクトを削除して再生成することは必要ありません。既存のすべての API オブジェクトは、すでに新しい API バージョンを使用して読み込み、更新できます。しかしながら、ユーザーは Kubernetes 1.23 にアップグレードする前に、クライアントとマニフェストを移行することを推奨します。詳細については、非推奨 API の移行ガイドの「対処方法」をご覧ください。

非推奨化に関する分析情報と推奨事項を表示して、非推奨の Kubernetes 機能または API がクラスタで使用されているかどうかを判断できます。DEPRECATION_K8S_1_22_V1BETA1_API サブタイプで Ingress beta API の使用に関する分析情報と推奨事項を探します。

非推奨化に関する分析情報は、Kubernetes オブジェクトの構成ではなく、ユーザー エージェントによる非推奨 API への API 呼び出しを観測した結果に基づいています。

非推奨の影響を受けるクラスタを更新する

非推奨の影響を受けるクラスタをアップグレードする手順は、次のとおりです。

  1. 非推奨の API を使用しているユーザー エージェントは、非推奨化に関する分析情報またはログで確認できます。
  2. 非推奨の API を使用するユーザー エージェントを、サポート対象の API バージョンを使用するように更新します。
  3. 非推奨の API を呼び出すサードパーティ ソフトウェアを最新バージョンに更新します。
  4. 非推奨の API が使用不能になった場合の中断のリスクを軽減するために、本番環境クラスタをアップグレードする前に、テスト用クラスタをアップグレードしてテスト環境でアプリケーションをテストします。
  5. すべてのユーザー エージェントを更新すると、GKE は非推奨の API の使用が 30 日間観察されなくなるまで待機し、その後、自動アップグレードのブロックを解除します。自動アップグレードはリリース スケジュールに沿って行われます。
  6. 影響を受けるユーザー エージェントを更新できない場合は、別のテストクラスタをアップグレードして、アップグレードで中断が発生するかどうかを確認します。アップグレードで中断が発生しない場合は、クラスタを手動でアップグレードできます。

リソース

詳細については、以下の OSS Kubernetes ドキュメントをご覧ください。