[英]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.