[英]Mailgun::CommunicationError via nginx '301 Moved Permanently' error
[英]Kubernetes / Minikube Ingress error (301 Moved Permanently)
我正在關注Kubernetes教程,並在我的MacBook上使用Minikube作為我的Kubernetes環境。 本教程中的所有步驟都運行良好,但Ingress工作除外(我正在關注的Ingress教程位於: https : //cloud.google.com/container-engine/docs/tutorials/http-balancer ) 。 通過Ingress訪問時,我收到“301 Moved Permanently”錯誤。
我的環境:
我使用默認的Ingress控制器(minikube的nginx)並成功啟用了入口:
minikube addons enable ingress
然后我按照教程中的步驟操作:
第1步:部署nginx服務器(SUCCESSFUL)
kubectl run nginx --image=nginx --port=80
步驟2a:在內部將您的nginx部署公開為服務(SUCCESSFUL)
kubectl expose deployment nginx --target-port=80 --type=NodePort
步驟2b:驗證服務是否可用:
kubectl get service nginx
輸出:
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx 10.0.0.170 <nodes> 80:31635/TCP 7s
從上面,我知道服務是正確創建的......
第3步:創建Ingress資源(SUCCESSFUL)
Ingress配置YAML(basic-ingress.yaml):
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: basic-ingress
spec:
backend:
serviceName: nginx
servicePort: 80
現在應用YAML:
kubectl apply -f basic-ingress.yaml
步驟4a:驗證Ingress
kubectl get ingress basic-ingress
輸出:
NAME HOSTS ADDRESS PORTS AGE
basic-ingress * 192.168.64.37 80 16s
步驟4b:訪問申請表( * UNSUCCESSFUL * )
該教程指出我應該“將瀏覽器指向應用程序的外部IP地址,並看到標題為”歡迎使用nginx!“的網頁。
當我將瀏覽器指向該站點( http://192.168.64.37 )時,嘗試轉換為https,這會導致錯誤“安全連接失敗”(來自Firefox,但Chrome的類似錯誤)
但是,當我卷曲網站時,我收到“301”錯誤:
curl 192.168.64.37
輸出:
<html>
<head><title>301 Moved Permanently</title></head>
<body bgcolor="white">
<center><h1>301 Moved Permanently</h1></center>
<hr><center>nginx/1.11.12</center>
</body>
</html>
我一直試圖調試這個,但到目前為止沒有運氣,但是,我在下面提供了進一步的信息......也許它在診斷問題時會有用:
完整入口說明:
kubectl describe ingress
輸出:
Name: basic-ingress
Namespace: default
Address: 192.168.64.38
Default backend: nginx:80 (172.17.0.3:80)
Rules:
Host Path Backends
---- ---- --------
* * nginx:80 (172.17.0.3:80)
Annotations:
Events:
FirstSeen LastSeen Count From SubObjectPath Type Reason Message
--------- -------- ----- ---- ------------- -------- ------ -------
3m 3m 1 {ingress-controller } Normal CREATE Ingress default/basic-ingress
3m 3m 1 {ingress-controller } Normal UPDATE Ingress default/basic-ingress
以下是nginx Ingress pod日志:
2017-05-26T16:08:27.142309346Z I0526 16:08:27.142156 1 launch.go:101] &{NGINX 0.9.0-beta.4 git-72bb2222 git@github.com:ixdy/kubernetes-ingress.git}
2017-05-26T16:08:27.142345769Z I0526 16:08:27.142218 1 launch.go:104] Watching for ingress class: nginx
2017-05-26T16:08:27.142350322Z I0526 16:08:27.141160 1 nginx.go:180] starting NGINX process...
2017-05-26T16:08:27.142834005Z I0526 16:08:27.142764 1 launch.go:257] Creating API server client for https://10.0.0.1:443
2017-05-26T16:08:27.166946862Z I0526 16:08:27.166808 1 launch.go:120] validated kube-system/default-http-backend as the default backend
2017-05-26T16:08:27.174640373Z I0526 16:08:27.174527 1 controller.go:1184] starting Ingress controller
2017-05-26T16:08:27.175954273Z I0526 16:08:27.175092 1 leaderelection.go:203] attempting to acquire leader lease...
2017-05-26T16:08:27.183187824Z I0526 16:08:27.183085 1 leaderelection.go:213] successfully acquired lease kube-system/ingress-controller-leader-nginx
2017-05-26T16:08:28.175881543Z W0526 16:08:28.175472 1 backend_ssl.go:42] deferring sync till endpoints controller has synced
2017-05-26T16:08:28.179906454Z W0526 16:08:28.179769 1 queue.go:94] requeuing kube-system/default-http-backend, err deferring sync till endpoints controller has synced
2017-05-26T16:08:31.207329775Z I0526 16:08:31.206860 1 event.go:217] Event(v1.ObjectReference{Kind:"Ingress", Namespace:"default", Name:"basic-ingress", UID:"8fd367b9-422d-11e7-9dd4-d68827e778d4", APIVersion:"extensions", ResourceVersion:"278", FieldPath:""}): type: 'Normal' reason: 'CREATE' Ingress default/basic-ingress
2017-05-26T16:08:37.353651374Z I0526 16:08:37.353525 1 metrics.go:34] changing prometheus collector from to default
2017-05-26T16:08:37.416440774Z I0526 16:08:37.416333 1 controller.go:421] ingress backend successfully reloaded...
2017-05-26T16:08:57.183350506Z I0526 16:08:57.183046 1 status.go:302] updating Ingress default/basic-ingress status to [{192.168.64.38 }]
2017-05-26T16:08:57.186454653Z I0526 16:08:57.186366 1 event.go:217] Event(v1.ObjectReference{Kind:"Ingress", Namespace:"default", Name:"basic-ingress", UID:"8fd367b9-422d-11e7-9dd4-d68827e778d4", APIVersion:"extensions", ResourceVersion:"327", FieldPath:""}): type: 'Normal' reason: 'UPDATE' Ingress default/basic-ingress
2017-05-26T16:08:57.471160018Z W0526 16:08:57.471017 1 queue.go:94] requeuing kube-system/ingress-controller-leader-nginx, err
2017-05-26T16:08:57.471182113Z -------------------------------------------------------------------------------
2017-05-26T16:08:57.471185648Z Error: exit status 1
2017-05-26T16:08:57.471188375Z nginx: the configuration file /tmp/nginx-cfg585054790 syntax is ok
2017-05-26T16:08:57.47119123Z 2017/05/26 16:08:57 [emerg] 164#164: no "events" section in configuration
2017-05-26T16:08:57.471194521Z nginx: [emerg] no "events" section in configuration
2017-05-26T16:08:57.471197512Z nginx: configuration file /tmp/nginx-cfg585054790 test failed
2017-05-26T16:08:57.471200655Z
2017-05-26T16:08:57.471203144Z -------------------------------------------------------------------------------
2017-05-26T16:09:37.260238379Z E0526 16:09:37.260068 1 controller.go:417] unexpected failure restarting the backend:
2017-05-26T16:09:37.260266173Z 2017/05/26 16:09:37 [emerg] 182#182: no "events" section in configuration
2017-05-26T16:09:37.260271749Z nginx: [emerg] no "events" section in configuration
2017-05-26T16:09:37.260276045Z W0526 16:09:37.260095 1 queue.go:94] requeuing kube-system/kube-dns, err exit status 1
2017-05-26T16:09:47.20646199Z I0526 16:09:47.206349 1 controller.go:421] ingress backend successfully reloaded...
2017-05-26T16:10:22.518854138Z 192.168.64.1 - [192.168.64.1] - - [26/May/2017:16:10:22 +0000] "GET / HTTP/1.1" 404 21 "-" "curl/7.51.0" 77 0.001 [upstream-default-backend] 172.17.0.4:8080 21 0.001 404
2017-05-26T16:10:30.797507654Z 192.168.64.1 - [192.168.64.1] - - [26/May/2017:16:10:30 +0000] "GET / HTTP/1.1" 404 21 "-" "curl/7.51.0" 77 0.000 [upstream-default-backend] 172.17.0.4:8080 21 0.000 404
最后一點注意......當我在basic-ingress.yaml文件中添加“host:”標記時,將basic-ingress.yaml文件中使用的主機名映射到/ etc /中的IP地址(192.168.64.37)主持人,然后我能夠使它工作。 不知道為什么Minikube需要一個“主機”標簽,其中幾乎相同的教程在沒有主機標簽的GCE上運行。
經過一些實驗,似乎nginx入口插件錯誤地嘗試重定向到https協議(端口443),但如果沒有配置(這是我的情況),則發生“301 Moved Permanently”錯誤...所以為了解決這個問題,我將ssl-redirect標志設置如下(參見新的注釋標簽ingress.kubernetes.io/ssl-redirect,它被設置為“false”),似乎解決了這個問題。
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: basic-ingress
annotations:
ingress.kubernetes.io/ssl-redirect: "false"
spec:
backend:
serviceName: nginx
servicePort: 80
如果您使用minikube addons enable ingress
那么將部署入口控制器(不需要部署您自己的入口控制器)。 可能與兩個入口控制器存在沖突。 我的建議是刪除你創建的控制器並堅持已經部署的minikube ingress插件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.