簡體   English   中英

minikube 和 ingress-nginx 沒有打開 80 端口

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

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