【问题标题】:kubernetes (GKE) nginx ingress looks fine but does not workkubernetes (GKE) nginx 入口看起来不错但不起作用
【发布时间】:2019-11-04 16:06:31
【问题描述】:

我跟着this guide在GKE中安装了nginx入口控制器。

之后我关注this guide 为我的服务创建入口资源。

我已经成功设置了我的测试应用和服务。通过端口转发到容器对此进行了测试。

设置入口似乎很好,但我无法访问它。打开外部ip时会打印以下502错误:

错误:服务器错误

服务器遇到临时错误,可以 未完成您的请求。

请在 30 秒后重试。

请查看入口的describe

│Name:         teamcity                                                                                                                           │
│Namespace:    default                                                                                                                            │
│Labels:       <none>                                                                                                                             │
│Annotations:  ingress.kubernetes.io/backends: {"k8s-be-31984--b5c10175cf4f125b":"UNHEALTHY"}                                                     │
│              ingress.kubernetes.io/forwarding-rule: k8s-fw-default-teamcity--b5c10175cf4f125b                                                   │
│              ingress.kubernetes.io/target-proxy: k8s-tp-default-teamcity--b5c10175cf4f125b                                                      │
│              ingress.kubernetes.io/url-map: k8s-um-default-teamcity--b5c10175cf4f125b                                                           │
│              kubectl.kubernetes.io/last-applied-configuration:                                                                                  │
│                {"apiVersion":"extensions/v1beta1","kind":"Ingress","metadata":{"annotations":{},"name":"teamcity","namespace":"default"},"spec":│
│{"backend...                                                                                                                                     │
│API Version:  extensions/v1beta1                                                                                                                 │
│Kind:         Ingress                                                                                                                            │
│Metadata:                                                                                                                                        │
│  Creation Timestamp:  2019-11-02T12:49:21Z                                                                                                      │
│  Generation:          1                                                                                                                         │
│  Resource Version:    553521                                                                                                                    │
│  Self Link:           /apis/extensions/v1beta1/namespaces/default/ingresses/teamcity                                                            │
│  UID:                 312aa230-fd6f-11e9-ad91-42010a84009d                                                                                      │
│Spec:                                                                                                                                            │
│  Backend:                                                                                                                                       │
│    Service Name:  teamcity                                                                                                                      │
│    Service Port:  8111                                                                                                                          │
│Status:                                                                                                                                          │
│  Load Balancer:                                                                                                                                 │
│    Ingress:                                                                                                                                     │
│      Ip:  35.190.86.15                                                                                                                          │
│Events:                                                                                                                                          │
│  Type    Reason  Age   From                     Message                                                                                         │
│  ----    ------  ----  ----                     -------                                                                                         │
│  Normal  ADD     18m   loadbalancer-controller  default/teamcity                                                                                │
│  Normal  CREATE  17m   loadbalancer-controller  ip: 35.190.86.15   

另外,这里是我的整个混搭的 yaml 文件:

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: teamcity
  labels:
    app: teamcity
spec:
  replicas: 1
  selector:
    matchLabels:
      app: teamcity
  template:
    metadata:
      labels:
        app: teamcity
    spec:
      containers:
      - name: teamcity-server
        image: jetbrains/teamcity-server:latest
        ports:
        - containerPort: 8111
---
apiVersion: v1
kind: Service
metadata:
  name: teamcity
  labels:
    app: teamcity
spec:
  type: NodePort
  ports:
  - port: 8111
    targetPort: 8111
    protocol: TCP
  selector:
    app: teamcity
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: teamcity
spec:
  backend:
    serviceName: teamcity
    servicePort: 8111

我想知道我在这里做错了什么。

【问题讨论】:

    标签: nginx kubernetes kubernetes-ingress


    【解决方案1】:

    您正在将 GKE 入口控制器与该入口资源一起使用,而不是 Nginx。事实证明,它正在创建所有资源来创建 HTTP 负载均衡器;转发规则、目标代理、url映射、后端服务。

    您需要将注解 kubernetes.io/ingress.class: "nginx" 传递给您的 Ingress 资源,让它知道它应该使用 Nginx Ingress Controller。

    现在,由于 GCP 负载平衡器不会立即开始工作,因此您暂时会收到 503。大概 3-4 分钟后你会得到 200 个。

    【讨论】:

      【解决方案2】:

      当您使用 ingress 时,nginx 服务将暴露给 LoadBalancer,而其他服务只能保留在 clusterIP 上。

      您可以在此处将服务更改为 ClusterIP 类型而不是 Nodeport,并尝试以这种方式构建您的入口规则 -

      apiVersion: extensions/v1beta1
      kind: Ingress
      metadata:
        annotations:
          kubernetes.io/ingress.class: nginx
        name: rule-name
        namespace: default
      spec:
        rules:
        - host: hostname
          http:
            paths:
            - backend:
                serviceName: teamcity
                servicePort: 8111
      

      在当前场景中,您还没有将任何主机名映射到您的入口规则,如果您没有专门的主机名,您可以使用映射到您的公共 IP/nginx 外部 IP 的 DNS 名称。

      【讨论】:

      • 我仍然收到以下错误:[xetra11@x11-work coopr-infrastructure]$ kubectl apply -f teamcity-deployment.yaml deployment.apps/teamcity unchanged ingress.extensions/teamcity configured The Service "teamcity" is invalid: spec.ports[0].nodePort: Forbidden: may not be used when `type` is 'ClusterIP'
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-25
      • 1970-01-01
      相关资源
      最近更新 更多