【问题标题】:Setting up Ingress (Kubernetes)设置入口 (Kubernetes)
【发布时间】:2018-10-07 04:15:43
【问题描述】:

我想设置一个 Ingress,它将流量路由到我的底层服务。不幸的是,我在部署 ingress-controller-deployment.yaml 时遇到错误,我不知道为什么...带有 ingress-controller 的 pod 立即崩溃,并显示错误消息“CrashLoopBackOff”。

据我了解,Ingress-Control 必须部署在 Pod 中,并且可以通过 ingress-svc 访问该 pod。 ingress-svc 似乎可以工作,但 Pod 崩溃了。在入口控制器工作后,我需要一个定义路由和所有内容的附加文件。但我看不出没有工作且可部署的入口控制器继续下去的意义。


Pod description:

    Name:           ingress-controller-7749c785f-x94ll
    Namespace:      ingress
    Node:           gke-cluster-1-default-pool-8484e77d-r4wp/10.128.0.2
    Start Time:     Thu, 26 Apr 2018 14:25:04 +0200
    Labels:         k8s-app=nginx-ingress-lb
                    pod-template-hash=330573419
    Annotations:    kubernetes.io/created-by={"kind":"SerializedReference","apiVersion":"v1","reference":{"kind":"ReplicaSet","namespace":"ingress","name":"ingress-controller-7749c785f","uid":"d8ff0a6d-494c-11e8-a840
    -420...
    Status:         Running
    IP:             10.8.0.14
    Created By:     ReplicaSet/ingress-controller-7749c785f
    Controlled By:  ReplicaSet/ingress-controller-7749c785f
    Containers:
      nginx-ingress-controller:
        Container ID:  docker://5654c7dffc44510132cba303d66ee570280f2cec235e4d4fa6ef8ad543e0c91d
        Image:         quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.9.0
        Image ID:      docker-pullable://quay.io/kubernetes-ingress-controller/nginx-ingress-controller@sha256:39cc6ce23e5bcdf8aa78bc28bbcfe0999e449bf99fe2e8d60984b417facc5cd4
        Ports:         80/TCP, 443/TCP
        Args:
          /nginx-ingress-controller
          --admin-backend-svc=$(POD_NAMESPACE)/admin-backend
        State:          Waiting
          Reason:       CrashLoopBackOff
        Last State:     Terminated
          Reason:       Error
          Exit Code:    2
          Started:      Thu, 26 Apr 2018 14:26:57 +0200
          Finished:     Thu, 26 Apr 2018 14:26:57 +0200
        Ready:          False
        Restart Count:  4
        Liveness:       http-get http://:10254/healthz delay=10s timeout=5s period=10s #success=1 #failure=3
        Environment:
          POD_NAME:       ingress-controller-7749c785f-x94ll (v1:metadata.name)
          POD_NAMESPACE:  ingress (v1:metadata.namespace)
        Mounts:
          /var/run/secrets/kubernetes.io/serviceaccount from default-token-plbss (ro)
    Conditions:
      Type           Status
      Initialized    True
      Ready          False
      PodScheduled   True
    Volumes:
      default-token-plbss:
        Type:        Secret (a volume populated by a Secret)
        SecretName:  default-token-plbss
        Optional:    false
    QoS Class:       BestEffort
    Node-Selectors:  <none>
    Tolerations: node.alpha.kubernetes.io/notReady:NoExecute for 300s
node.alpha.kubernetes.io/unreachable:NoExecute for 300s

Ingress-controller-deployment.yaml

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: ingress-controller
spec:
  replicas: 1
  revisionHistoryLimit: 3
  template:
    metadata:
      labels:
        k8s-app: nginx-ingress-lb
    spec:
      containers:
        - args:
            - /nginx-ingress-controller
            - "--admin-backend-svc=$(POD_NAMESPACE)/admin-backend"
          env:
            - name: POD_NAME
              valueFrom:
                fieldRef:
                  fieldPath: metadata.name
            - name: POD_NAMESPACE
              valueFrom:
                fieldRef:
                  fieldPath: metadata.namespace
          image: "quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.9.0"
          imagePullPolicy: Always
          livenessProbe:
            httpGet:
              path: /healthz
              port: 10254
              scheme: HTTP
            initialDelaySeconds: 10
            timeoutSeconds: 5
          name: nginx-ingress-controller
          ports:
            - containerPort: 80
              name: http
              protocol: TCP
            - containerPort: 443
              name: https
              protocol: TCP
---
apiVersion: v1
kind: Service
metadata:
  name: ingress-svc
spec:
  type: LoadBalancer
  ports:
  - name: http
    port: 80
    targetPort: http
  - name: https
    port: 443
    targetPort: https
  selector:
    k8s-app: nginx-ingress-lb

【问题讨论】:

  • 在部署它之前,我创建了一个名为“ingress”的命名空间,并在这个命名空间中创建了 pod 和服务。
  • 尝试从 pod 中获取日志?
  • 日志显示“未知标志:--admin-backend-svc”,所以我认为这与我的参数有关。你知道它有什么问题吗?
  • 你的意思是--default-backend-service

标签: nginx kubernetes google-cloud-platform kubernetes-helm


【解决方案1】:

问题是参数。我的一个参数是

      args:
        - /nginx-ingress-controller
        - --default-backend-service=$(POD_NAMESPACE)/default-http-backend
        - --configmap=$(POD_NAMESPACE)/nginx-configuration
        - --tcp-services-configmap=$(POD_NAMESPACE)/tcp-services
        - --udp-services-configmap=$(POD_NAMESPACE)/udp-services
        - --publish-service=$(POD_NAMESPACE)/ingress-nginx
        - --annotations-prefix=nginx.ingress.kubernetes.io

我还为配置、tcp 和 udp 创建了配置映射。

【讨论】:

  • 谢谢!你能告诉我这是什么意思吗?我用这个参数配置什么?
  • 在上面的 .yaml 文件中,将以 --admin-backend-svc 开头的行更改为 --default-backend-service 并从我上面的示例中的同一行复制值。不要使用我示例中的其他行,只使用 --default-backend-service
  • 是的,它解决了我的问题。但我试图了解我在做什么。我在用这条线做什么?
  • nginx-ingress-controller 没有名为“admin-backend-svc”的选项。您是否了解配置中该选项的出处? default-http-backend 选项命名应该接收请求的服务,这些请求与 ingress-controller 监视的 Ingress 资源中指定的主机、路径和其他规则不匹配,然后根据其更新 nginx 配置。我相信这是控制器唯一需要的选项,但这可能是错误的。这是一个有用的指南:kubernetes.github.io/ingress-nginx/deploy
猜你喜欢
  • 2019-11-20
  • 2017-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-03
相关资源
最近更新 更多