APC 技術ブログ

株式会社エーピーコミュニケーションズの技術ブログです。

株式会社 エーピーコミュニケーションズの技術ブログです。

AGICを使うときはチュートリアルにあるextensions/v1beta1からnetworking.k8s.io/v1に変更しよう

f:id:thanaism:20210609111500p:plain

コンテナソリューショングループの髙井です。

AKSへMicrosoft Docsの通りにAGICをインストールしていたら、

Warning: extensions/v1beta1 Ingress is deprecated in v1.14+, unavailable in v1.22+; use networking.k8s.io/v1 Ingress

というエラーが出た人向けの情報です。

いきなりですがKubernetesのDeprecated API Migration Guideを見てみましょう。

kubernetes.io

中段のあたりにIngressの項目があります。

The extensions/v1beta1 and networking.k8s.io/v1beta1 API versions of Ingress is no longer served as of v1.22.

  • Migrate manifests and API clients to use the networking.k8s.io/v1 API version, available since v1.19.
  • All existing persisted objects are accessible via the new API
  • Notable changes:
    • spec.backend is renamed to spec.defaultBackend
    • The backend serviceName field is renamed to service.name
    • Numeric backend servicePort fields are renamed to service.port.number
    • String backend servicePort fields are renamed to service.port.name
    • pathType is now required for each specified path. Options are Prefix, Exact, and ImplementationSpecific. To match the undefined v1beta1 behavior, use ImplementationSpecific.

言ってしまえば、今日の内容としてはここにほぼすべてが書かれているわけですが、もう少し丁寧に追っていきましょう。

Microsoft Docsのサンプルがextensions/v1beta1になっている

こちらのページにAGICをグリーンフィールドにデプロイするチュートリアルが載っています。

docs.microsoft.com

そこで使用するサンプルアプリケーションを外部からダウンロードするようになっていますが、これがextensions/v1beta1のままです。

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: aspnetapp
  annotations:
    kubernetes.io/ingress.class: azure/application-gateway
spec:
  rules:
  - http:
      paths:
      - path: /
        backend:
          serviceName: aspnetapp
          servicePort: 80

一応、こういった変更漏れに対するプルリクエストも出ているようですね。

github.com

対処方法

先ほど公式ページに書いてあった通りの内容に直していきましょう。

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: aspnetapp
  annotations:
    kubernetes.io/ingress.class: azure/application-gateway
spec:
  rules:
  - http:
      paths:
      - path: /
        backend:
          # serviceName: aspnetapp
          # servicePort: 80
          # コメントアウトした部分の指定方法が変更
          service:
              name: aspnetapp
              port:
                number: 80
        # pathTypeの指定が必須
        pathType: Exact

pathTypeをどうすればいいか

公式のページに日本語で詳しい説明がありますのでそちらを参照するのがよいです。

kubernetes.io

ちなみにMicrosoft Docsのサンプルアプリなら正直どれを選んでも動きます。

他の場合でも悩んだらImplementationSpecificを指定しておけばいいですね(記事の冒頭で引用した部分の内容ですが、これまで指定していなかった時と同じ動きをすると書いてあります)。

おわりに

どれも公式の情報ですが、AGICをチュートリアルを見ながらはじめて使うケースなどでは、それなりに詰まりやすいポイントかもしれません。

最初のうちは「どこを調べればいいかわからない!」ということが多いので、対処方法がどこを探せば見つかるのかも含め書いてみました。

そんなわけで、みなさんのAzureライフが楽しくなりますように! それでは~。