2021年3月15日月曜日

nginx-ingress-controller で All hosts are taken by other resources

概要

どうやら同一ドメインに対するルールは同一ファイルに定義しないとダメなようです

環境

  • Ubuntu18.04
  • kubernetes v1.20.4

対応策

例えば foo.bar.com という Host でアクセスする場合に以下のように 2 つのファイルを作成してはダメなようなです

  • vim ingress1.yml
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: example-ingress1
  annotations:
    kubernetes.io/ingress.class: "nginx"
spec:
  rules:
  - host: foo.bar.com
    http:
      paths:
        - path: /app1
          backend:
            serviceName: service1
            servicePort: 5678
  • vim ingress2.yml
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: example-ingress2
  annotations:
    kubernetes.io/ingress.class: "nginx"
spec:
  rules:
  - host: foo.bar.com
    http:
      paths:
        - path: /app2
          backend:
            serviceName: service2
            servicePort: 5678

これで ingress1 -> ingress2 の順番で起動すると ingress2 のほうが All hosts are taken by other resources になると思います
この場合 paths の定義を統合して 1 つのファイルにしてから apply してあげましょう

  • vim ingress.yml
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: example-ingress2
  annotations:
    kubernetes.io/ingress.class: "nginx"
spec:
  rules:
  - host: foo.bar.com
    http:
      paths:
        - path: /app1
          backend:
            serviceName: service1
            servicePort: 5678
        - path: /app2
          backend:
            serviceName: service2
            servicePort: 5678

どうしてもファイルを分けたい場合は host 自体を別の名前にする必要があります

0 件のコメント:

コメントを投稿