[英]How can I see the ingress endpoints of kubernetes?
我想知道,為某個入口正確配置了哪些端點。
例如,我有以下入口:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: dictionary
spec:
tls:
- hosts:
- dictionary.juan.com
secretName: microsyn-secret
backend:
serviceName: microsyn
servicePort: 8080
rules:
- host: dictionary.juan.com
http:
paths:
- path: /synonyms/*
backend:
serviceName: microsyn
servicePort: 8080
正在使用以下服務:
apiVersion: v1
kind: Service
metadata:
name: microsyn
spec:
ports:
- port: 8080
targetPort: 8080
protocol: TCP
name: http
selector:
app: microsyn
該服務公開了此部署:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: microsyn
spec:
replicas: 1
selector:
matchLabels:
app: microsyn
template:
metadata:
labels:
app: microsyn
spec:
containers:
- name: microsyn
image: microsynonyms
imagePullPolicy: Never
ports:
- containerPort: 8080
該應用程序是一個偵聽端口8080的nodejs應用程序,它在我剛剛在本地創建的docker映像中為路徑“ /”打招呼,這就是它具有imagePullPolicy的原因:從不,它僅用於測試目的並學習如何創建一個入口。
因此,我從nginx-ingress創建了入口,它已經啟動並正在使用Nodeport進行本地環境測試,之后,我將其帶入帶有負載均衡器的部署中:
https://github.com/nginxinc/kubernetes-ingress/tree/master/examples/complete-example
因此,我執行以下操作:
minikube service list
|---------------|----------------------|--------------------------------| | NAMESPACE | NAME | URL | |---------------|----------------------|--------------------------------| | default | kubernetes | No node port | | default | microsyn | No node port | | kube-system | default-http-backend | http://192.168.99.100:30001 | | kube-system | kube-dns | No node port | | kube-system | kubernetes-dashboard | http://192.168.99.100:30000 | | nginx-ingress | nginx-ingress | http://192.168.99.100:31253 | | | | http://192.168.99.100:31229 | |---------------|----------------------|--------------------------------|
我能做到的出色:
curl http://192.168.99.100:31253/synonyms
但是然后我得到一個:
<html>
<head><title>404 Not Found</title></head>
<body bgcolor="white">
<center><h1>404 Not Found</h1></center>
<hr><center>nginx/1.15.2</center>
</body>
</html>
所以我唯一的nginx是這個minikube中的一個,它工作正常。 但是我看不到為此入口配置了哪些端點...
我看到以下日志:
2018/08/11 16:07:05 [notice] 117#117: signal process started
I0811 16:07:05.313037 1 event.go:218] Event(v1.ObjectReference{Kind:"Ingress", Namespace:"default", Name:"dictionary", UID:"9728e826-9d80-11e8-9caa-0800270091d8", APIVersion:"extensions", ResourceVersion:"57014", FieldPath:""}): type: 'Normal' reason: 'AddedOrUpdated' Configuration for default/dictionary was added or updated
W0811 16:15:05.826537 1 reflector.go:341] github.com/nginxinc/kubernetes-ingress/nginx-controller/controller/controller.go:413: watch of *v1.ConfigMap ended with: too old resource version: 56348 (56655)
因此,這意味着字典入口已被正確處理。
但是,為什么我會得到404?
在哪里可以看到為此入口配置的端點?
我想運行一個命令,說nginx->您正在偵聽哪些端點?
但是,為什么我會得到404?
入口資源-或肯定是您在問題中顯示的資源-使用虛擬主機路由,因此在與該URL交互時必須設置host:
標頭:
curl -H 'host: dictionary.juan.com' http://192.168.99.100:31253/synonyms/something
我必須查找path:
語法,以了解/synonyms/*
匹配/synonyms
,這就是為什么我在curl
包含斜杠和多余內容的原因。
要以非curl
方式與之交互,您可以將host:
在Ingress
更改為臨時為192.168.99.100,或使用dnsmasq創建本地名稱服務器,在其中可以覆蓋dictionary.juan.com
以始終返回192.168.99.100
,然后Chrome會自行發送正確的host:
標頭。
在哪里可以看到為此入口配置的端點?
這個問題有點不准確,因為Endpoint
是一種正式資源,與Ingress
無關,但是答案是:
kubectl get endpoints microsyn
我想運行一個命令,說nginx->您正在偵聽哪些端點?
首先,查找nginx-ingress Pod的名稱(如果有多個,則其中的任何一個都應該執行),然后查看Pod中的nginx.conf
,以確切地知道它將Ingress
資源轉換為什么規則:
kubectl exec $ingress_pod cat /etc/nginx/nginx.conf
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.