Kubernetes的Ingress对Nginx-ingress-controller没有影响

时间:2018-09-26 18:56:40

标签: nginx kubernetes kubernetes-ingress nginx-ingress

我已经部署了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

2 个答案:

答案 0 :(得分:3)

如果要到达詹金斯端点,则不应该使用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集群中的机器处于同一台计算机中。

答案 1 :(得分:2)

似乎您部署的方式不包括监视kubernetes中的Ingress资源所需的功能。

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

我个人建议使用舵图选项:https://kubernetes.github.io/ingress-nginx/deploy/#using-helm

  

可以使用下表通过Helm安装NGINX Ingress控制器   来自官方图表资料库的稳定版/ nginx-ingress。安装   发布名称为my-nginx的图表:

     

helm install stable / nginx-ingress --name my-nginx如果kubernetes   集群已启用RBAC,然后运行:

     

helm install stable / nginx-ingress --name my-nginx --set   rbac.create = true检测安装的版本:

     

POD_NAME = $(kubectl获取容器-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.   
  3. 修改/etc/hosts,使其在您的计算机上具有条目Node-IP example.com,然后浏览至:

    http://example.com:31111/jenkins
    
  4.