簡體   English   中英

Kubernetes的Ingress對Nginx-ingress-controller沒有影響

[英]Kubernetes's Ingress has no effect on nginx-ingress-controller

我已經部署了nginx:

kubectl run nginx --image=nginx

我暴露了nginx

kubectl expose deployment nginx --port 80 --type NodePort

而當執行此命令

kubectl get svc
NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE

nginx        NodePort    10.254.237.40   <none>        80:31111/TCP   22s

jenkins      ClusterIP   10.254.118.81   <none>        8080/TCP       45m

我部署了Ingress文件

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: nginx
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
    - host: example.com
      http:
        paths:
        - path: /jenkins
          backend:
            serviceName: jenkins
            servicePort: 8080

並知道入口的輸出

-> kubectl apply -f ingress.yaml
ingress.extensions "nginx" configured
-> kubectl get ing
NAME      HOSTS           ADDRESS   PORTS     AGE
nginx     example.com             80        40m

而當瀏覽器

http://Node-IP:31111
Returns Nginx's Welcome Page

而當瀏覽器

http://http://Node-IP:31111/jenkins
Returns 404 Not Found

有我不明白的東西嗎?

以及如何解決這個問題?

謝謝你:D

如果要訪問jenkins端點,則不應使用Node-IP 在這種情況下,您需要使用example.com 但是您需要第7層主機標頭,以便Ingress能夠理解它。 要對其進行測試,您需要對其進行修改。 您可以通過以下兩種方法進行操作:

  1. 嘗試運行:

     curl -H 'Host: example.com' http://Node-IP:31111/jenkins 
  2. 修改/etc/hosts以在您的計算機上擁有一個條目Node-IP example.com文件,然后瀏覽至:

     http://example.com:31111/jenkins 

請注意,您正在使用NodePort服務。 您可以使用LoadBalancer類型來避免指定端口。 (使用默認端口80)。 您還可以使用clusterIP 10.254.237.40 ,但是要訪問它,您必須與Kubernetes集群中的計算機處於同一台計算機中。

看來您部署的方式不包括觀看kubernetes中的Ingress資源所需的功能。

我建議您以正式建議的方式部署nginx-ingress: https : //kubernetes.github.io/ingress-nginx/deploy/#generic-deployment

我個人建議使用舵圖選項: https : //kubernetes.github.io/ingress-nginx/deploy/#using-helm

NGINX Ingress控制器可以通過Helm使用官方圖表存儲庫中的圖表stable / nginx-ingress進行安裝。 要使用發布名稱my-nginx安裝圖表:

helm install stable / nginx-ingress --name my-nginx如果kubernetes集群啟用了RBAC,請運行:

掌舵安裝穩定版/ nginx-ingress --name my-nginx --set rbac.create = true檢測安裝的版本:

POD_NAME = $(kubectl get pods -l app.kubernetes.io/name=ingress-nginx -o jsonpath ='{。items [0] .metadata.name}')kubectl exec -it $ POD_NAME-/ nginx-ingress -controller --version

此外,有關傳遞正確的主機頭,請參閱@Rico的上述答案:

  1. 嘗試運行:

     curl -H 'Host: example.com' http://Node-IP:31111/jenkins 
  2. 修改/etc/hosts以在您的計算機上擁有一個條目Node-IP example.com文件,然后瀏覽至:

     http://example.com:31111/jenkins 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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