web-dev-qa-db-ja.com

Kubernetes Nginx Ingressがサービスエンドポイントを見つけられない

KubernetesクラスターでNginxイングレスコントローラーを機能させるのに問題があります。 https://kubernetes.github.io/ingress-nginx/deploy/ に従って、nginx-ingressのデプロイメント、サービス、ロールなどを作成しました

ポートhello-worldでリッスンするシンプルな8080アプリもデプロイしました

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: hello-world
  namespace: default
spec:
  selector:
    matchLabels:
      name: hello-world
  template:
    metadata:
      labels:
        name: hello-world
    spec:
      containers:
      - name: hello-world
        image: myrepo/hello-world
        resources:
          requests:
            memory: 200Mi
            cpu: 150m
          limits:
            cpu: 300m
        ports:
          - name: http
            containerPort: 8080
            protocol: TCP

そのためのサービスを作成しました

kind: Service
apiVersion: v1
metadata:
  namespace: default
  name: hello-world
spec:
  selector:
    app: hello-world
  ports:
    - name: server
      port: 8080

最後に、TLSシークレット(my-tls-secret)を作成し、指示に従ってnginxイングレスをデプロイしました。例えば:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: nginx
  name: hello-world
  namespace: default
spec:
  rules:
    - Host: hello-world.mydomain.com
      http:
        paths:
        - path: /
          backend:
            serviceName: hello-world
            servicePort: server
  tls:
      - hosts:
          - hello-world.mydomain.com
        secretName: my-tls-cert

ただし、アプリケーションに到達できず、ログに表示されます

W0103 19:11:15.712062       6 controller.go:826] Service "default/hello-world" does not have any active Endpoint.
I0103 19:11:15.712254       6 controller.go:172] Configuration changes detected, backend reload required.
I0103 19:11:15.864774       6 controller.go:190] Backend successfully reloaded.

なぜService "default/hello-world" does not have any active Endpointなのかわかりません。 traefikイングレスコントローラーに同様のサービス定義を問題なく使用しました。

私はnginxイングレスで明らかな何かを見逃していると思います。あなたが提供できるどんな助けでもありがたいです!

5
cookandy

発生する可能性があるもう1つの状況は、入力コントローラーの入力クラスが、サービスに使用される入力リソースマニフェストの入力クラスと一致しない場合です。

Nginxインストールコマンド、短い例:

  helm install stable/nginx-ingress \
  --name ${INGRESS_RELEASE_NAME} \
  --namespace ${K8S_NAMESPACE} \
  --set controller.scope.enabled=true \
  --set controller.scope.namespace=${K8S_NAMESPACE} \
  --set controller.ingressClass=${NGINX_INGRESS_CLASS}

入力リソース仕様。 、抜粋:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  labels:
  annotations:
    # folowing line is not valid for K8s or Helm, 
    # but reflects the values must be the same
    kubernetes.io/ingress.class: ${NGINX_INGRESS_CLASS}
0
Rostislav Matl