服务通过Cluster-IP,但不通过Ingress

时间:2020-10-04 16:36:29

标签: kubernetes-ingress

我需要帮助来弄清楚我的Ingress设置Minikube / ingress-nginx-controller在做什么。 Kubectl版本是1.19。 Minikube版本是1.13.1

我有2个服务:1是我从自己在dotnetcore中构建的映像创建的,另一个是我从示例中提取的。该示例没有给我带来任何问题:我可以通过http://myapp.com/web来实现。可以通过浏览器中的群集IP(端口80)直接访问我构建的对象,但是无法使用http://myapp.com/datasvc从浏览器访问我创建的对象(404错误)。这是我的Ingress yaml的摘录:

- host: myapp.com
  http:
    paths:
      - path: /web2 #works
        pathType: Prefix
        backend:
          service:
            name: web2
            port:
              number: 8080
      - path: /datasvc
        pathType: Prefix
        backend:
          service:
            name: datasvc
            port:
              number: 80

这是我的后端:

Rules:
  Host        Path  Backends
  ----        ----  --------
  myapp.com
              /web2       web2:8080     172.17.0.7:8080)
              /datasvc   datasvc:80   172.17.0.8:80)

服务:

NAME                    TYPE           CLUSTER-IP      EXTERNAL-IP     PORT(S)          AGE
datasvc                 ClusterIP      10.100.7.119    <none>          80/TCP           11hde here
web2                    NodePort       10.98.6.48      <none>          8080:31122/TCP   12h

curl -H "HOST: myapp.com" localhost/web2 -v的CURL输出:

*   Trying 127.0.0.1:80...
* TCP_NODELAY set
* Connected to localhost (127.0.0.1) port 80 (#0)
> GET /web2 HTTP/1.1
> Host: myapp.com    
> User-Agent: curl/7.67.0
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Server: nginx/1.19.1
< Date: Sun, 04 Oct 2020 16:16:55 GMT
< Content-Type: text/plain; charset=utf-8
< Content-Length: 61
< Connection: keep-alive
<
Hello, world!
Version: 1.0.0
Hostname: web2-7d85fb54bf-f26p2
* Connection #0 to host localhost left intact

curl -H "HOST: myapp.com" localhost/datasvc -v的CURL输出

*   Trying 127.0.0.1:80...
* TCP_NODELAY set
* Connected to localhost (127.0.0.1) port 80 (#0)
> GET /datasvc HTTP/1.1
> Host: myapp.com
> User-Agent: curl/7.67.0
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 404 Not Found
< Server: nginx/1.19.1
< Date: Sun, 04 Oct 2020 16:20:13 GMT
< Content-Length: 0
< Connection: keep-alive
<
* Connection #0 to host localhost left intact

我看到的两个唯一区别是示例(web2)服务使用type: NodePort,而我的服务使用默认值(type: ClusterIP)。我尝试对服务进行相同的操作,但这没什么区别。

我不知道还要从诊断角度看什么,或者从这里去哪里。我检查了许多中型帖子,但没有发现任何描述我的情况的信息。请让我知道是否需要提供更多信息。

1 个答案:

答案 0 :(得分:0)

入口supports either NodePort服务类型或LoadBalancerClusterIP服务仅在minikube VM内部可用。

对于minikube,您应该使用NodePort service type configuration。要在minikube上设置入口,您可以遵循official documentation

要公开您的部署,可以使用kubectl:

kubectl expose deployment <deployment_name> --type=NodePort --port=<port_number>

要检查服务是否正常运行,您可以运行minikube service list并卷曲您公开的URL。

如果一切正常,则可以设置入口并将IP AddressHOST添加到/etc/hosts