[英]Issue with install ingress-nginx on Window (Not minikube)
[英]minikube and ingress-nginx does not have port 80 open
我是 ingress-nginx 的新手,我使用minikube addons enable ingress
啟用了它。 在尋找與 ingress-nginx 相關的服務時,我運行kubectl get services -n kube-system
並得到:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ingress-nginx-controller-admission ClusterIP 10.96.141.138 <none> 443/TCP 16m
kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP,9153/TCP 16m
注意到我缺少端口 80,我運行kubectl describe service/ingress-nginx-controller-admission -n kube-system
並得到:
Name: ingress-nginx-controller-admission
Namespace: kube-system
Labels: addonmanager.kubernetes.io/mode=Reconcile
app.kubernetes.io/component=controller
app.kubernetes.io/instance=ingress-nginx
app.kubernetes.io/name=ingress-nginx
Annotations: <none>
Selector: app.kubernetes.io/component=controller,app.kubernetes.io/instance=ingress-nginx,app.kubernetes.io/name=ingress-nginx
Type: ClusterIP
IP: 10.96.141.138
Port: https-webhook 443/TCP
TargetPort: webhook/TCP
Endpoints: 172.17.0.3:8443
Session Affinity: None
Events: <none>
嘗試訪問端點https://ingress-nginx-controller-admission.kube-system.svc.cluster.local/foo
時,我收到此錯誤:
FetchError: request to https://ingress-nginx-controller-admission.kube-system.svc.cluster.local/foo failed, reason: unable to verify the first certificate
,盡管通過入口從 pod 內擊中端點/foo
工作得很好。 我正在查看tls 相關文檔,但無濟於事。 對此的任何幫助將不勝感激。
編輯:我添加了kubectl get svc -A
的 output 每個請求:
NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
default auth-svc ClusterIP 10.100.218.231 <none> 4000/TCP 13s
default client-svc ClusterIP 10.106.143.107 <none> 3000/TCP 12s
default kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 37m
kube-system ingress-nginx-controller-admission ClusterIP 10.96.141.138 <none> 443/TCP 36m
kube-system kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP,9153/TCP 37m
顧名思義,您正在查看的服務是 minikube ingress 插件的Admission Controller 。
Ingress Controller使用它來解析Ingress定義並配置底層 nginx(您可以查看minikube ingress 插件部署)
要訪問您可能已定義的公開 Ingress,您需要點擊minikube 機器的端口 80 或 443 (可通過minikube ip
)。 (您可以通過執行minikube ssh -- docker container ls --filter label=app.kubernetes.io/name=ingress-nginx
來查看這些監聽端口)
您需要的文檔是這個: https://kubernetes.io/docs/tasks/access-application-cluster/ingress-minikube/
因此,如果您使用host=hello-world.info
和path=/foo
定義了一個Ingress ,您將能夠通過以下方式訪問它:
curl --header 'Host: hello-world.info' http://`minikube ip`:80/foo
當然,最好將 DNS 條目定義到 map hello-world.info
到 minikube IP。
minikube 上的 Nginx 入口不使用服務來提供對入口 pod 的訪問。
它使用主機端口。 這是 ingres 控制器 pod 的 yaml 的一部分:
$ kubectl get pod -n kube-system ingress-nginx-controller-789d9c4dc-5wnc2 -oyaml
[...]
ports:
- containerPort: 80
hostPort: 80
name: http
protocol: TCP
- containerPort: 443
hostPort: 443
name: https
protocol: TCP
- containerPort: 8443
name: webhook
protocol: TCP
[...]
它的行為記錄在k8s api 參考文檔中
hostPort要在主機上公開的端口號。 如果指定,這必須是一個有效的端口號,0 < x < 65536。如果指定了 HostNetwork,它必須與 ContainerPort 匹配。 大多數容器不需要這個。
多虧了這一點,可以通過以下方式輕松訪問入口:
curl $(minikube ip)
運行kubectl expose deployment ingress-nginx-controller --target-port=80 --type=NodePort -n kube-system
允許我從集群中的 pod 訪問入口。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.