簡體   English   中英

kubernetes (GKE) nginx 入口看起來很好,但不起作用

[英]kubernetes (GKE) nginx ingress looks fine but does not work

我按照本指南在 GKE 中安裝 nginx 入口 controller。

之后,我按照本指南為我的服務創建了入口資源。

我已經成功設置了我的測試應用程序和服務。 通過端口轉發到容器對此進行了測試。

設置入口似乎很好,但我無法訪問它。 打開外部 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

我想知道我在這里做錯了什么。

您將 GKE 入口 controller 與該入口資源一起使用,而不是 Nginx。 證明是它正在創建所有資源來創建 HTTP 負載均衡器; 轉發規則,目標代理,url map,后端服務。

You need to pass the annotation kubernetes.io/ingress.class: "nginx" to your Ingress resource to let it know it shouod use Nginx Ingress Controller.

現在,由於 GCP 負載均衡器不會立即開始工作,您會得到 503。 大約 3-4 分鍾后,您可能會得到 200 個。

當您使用入口時,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

在當前場景中,您沒有將任何主機名映射到您的入口規則,如果您沒有專門的主機名,您可以使用 DNS 名稱映射到 nginx 的公共IP/外部IP。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM