1. ホーム
  2. kubernetes

[解決済み] Nginx Ingress: サービス "ingress-nginx-controller-admission" が見つかりません。

2022-02-16 10:57:46

質問

1年ほど前に顧客向けにkubernetesクラスタを作成し、ステージングとプロダクションの2つの環境をネームスペースで分けて構築しました。現在、アプリケーションの次のバージョンを開発中で、この開発作業のための環境が必要なので、独自のネームスペースにベータ環境を作成しました。

MetalLBとnginx-ingressを搭載したベアメタルkubernetesクラスタです。nginx ingressコントローラはhelmでインストールし、ingressは以下のマニフェストで作成しています(名前空間はデプロイメントパイプラインで強制されるので、マニフェストでは見えません)。

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: api-ingress
  annotations:
    #ingress.kubernetes.io/ssl-redirect: "true"
    #kubernetes.io/tls-acme: "true"
    #certmanager.k8s.io/issuer: "letsencrypt-staging"
    #certmanager.k8s.io/acme-challenge-type: http01
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/configuration-snippet: |
      more_set_headers "X-Robots-Tag: noindex, nofollow";
    nginx.ingress.kubernetes.io/enable-cors: "true"
    nginx.ingress.kubernetes.io/cors-allow-methods: "GET, OPTIONS"
    nginx.ingress.kubernetes.io/cors-allow-origin: "*"
    nginx.ingress.kubernetes.io/cors-allow-credentials: "true"
spec:
  tls:
    - hosts:
        - ${API_DOMAIN}
      secretName: api-cert
  rules:
    - host: ${API_DOMAIN}
      http:
        paths:
          - backend:
              serviceName: api
              servicePort: 80

マニフェストを適用すると、kubernetes は次のようなエラーで応答します。

サーバーからのエラー (InternalError): "STDIN" を作成する際にエラーが発生しました。内部エラーが発生しました: ウェブフック "validate.nginx.ingress.kubernetes.io" の呼び出しに失敗しました。投稿 https://ingress-nginx-controller-admission.ingress-nginx.svc:443/extensions/v1beta1/ingresses?timeout=30s : サービス "ingress-nginx-controller-admission" が見つかりませんでした。

ingressマニフェストのapiVersionを更新しようとしたところ networking.k8s.io/v1beta1 (これは新しいnginx-ingressコントローラがhelm経由でインストールされるapiVersionです) しかし、同じエラーが発生します。

私の最初の疑念は、たとえingressコントローラが名前空間によって分けられていたとしても、現在のインストールと1年前のインストールとの間のnginx-ingressの変更に関連しているということです。しかし ingress-nginx-controller-admission を、どの名前空間でも使用することができるため、どのように進めばよいのか分からない。

解決方法は?

私は同じ問題に直面し、別の方法で解決策を見つけました。 SOスレッド .

以前、マニフェストを使ってnginx-ingressをインストールしたことがあります。それが作成した名前空間を削除したら ドキュメントにあるようにclusterroleとclusterrolebindingは を削除することはできません。 ValidatingWebhookConfiguration は、マニフェストにインストールされますが、デフォルトで helm を使用する場合はインストールされません。として アルギア は、helmのパラメータを使用して有効にすることができます。

を削除したら ValidatingWebhookConfiguration helmのインストールは完璧に行われました。

kubectl delete -A ValidatingWebhookConfiguration ingress-nginx-admission