Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Docker 为什么K8s入口在Minikube上工作,但在远程集群上返回HTTP 404?_Docker_Nginx_Kubernetes_Kubernetes Helm_Kubernetes Ingress - Fatal编程技术网

Docker 为什么K8s入口在Minikube上工作,但在远程集群上返回HTTP 404?

Docker 为什么K8s入口在Minikube上工作,但在远程集群上返回HTTP 404?,docker,nginx,kubernetes,kubernetes-helm,kubernetes-ingress,Docker,Nginx,Kubernetes,Kubernetes Helm,Kubernetes Ingress,我有一个服务(作为另一个应用程序的Helm subchart安装)可以在Minikube环境中正确访问,但在远程Kubernetes群集上部署时无法访问 服务应该可以通过入口访问 进入: 服务 部署 将请求发送到helper service.example.com始终会从Nginx返回404未找到错误。给出响应后,Nginx似乎可以访问,但无法提供对入口中指定的服务的访问 但是,同一集群/命名空间上的父chart Helm应用程序可以通过节点端口服务的入口访问,并且在访问时没有问题 这两项服务

我有一个服务(作为另一个应用程序的Helm subchart安装)可以在Minikube环境中正确访问,但在远程Kubernetes群集上部署时无法访问

服务应该可以通过入口访问

进入: 服务 部署
将请求发送到
helper service.example.com
始终会从Nginx返回
404未找到
错误。给出响应后,Nginx似乎可以访问,但无法提供对入口中指定的服务的访问

但是,同一集群/命名空间上的父chart Helm应用程序可以通过节点端口服务的入口访问,并且在访问时没有问题

这两项服务都正常运行:

$ k get all
NAME                                         READY   STATUS             RESTARTS   AGE
pod/myapp-645cd66d9-g84vm                    2/2     Running            0          51m
pod/myapp-helper-service-fbc6bb4d8-zklf2     1/1     Running            0          4d19h

NAME                            TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)             AGE
service/myapp                   NodePort    10.10.10.11    <none>        8080:31033/TCP      110d
service/myapp-helper-service    ClusterIP   10.10.10.61    <none>        8080/TCP            110d

NAME                                    READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/myapp                   1/1     1            1           110d
deployment.apps/myapp-helper-service    1/1     1            1           110d
$ k get ingresses
NAME                    HOSTS                                             ADDRESS       PORTS     AGE
myapp                   myapp.example.com                                 37.44.1.172   80, 443   116d
myapp-helper-service    myapp-helper-service.example.com                                80        116d
入口详情如下:

$ k describe ingress/myapp-helper-service
Name:             myapp-helper-service
Namespace:        my-namespace
Address:
Default backend:  default-http-backend:80 (<error: endpoints "default-http-backend" is forbidden: User cannot get resource "endpoints" in API group "" in the namespace "kube-system">)
Rules:
  Host                                             Path  Backends
  ----                                             ----  --------
  myapp-helper-service.example.com
                                                   /   myapp-helper-service:service-port (172.25.0.207:8080)
                                                   Events:                                            <none>
$k描述入口/myapp帮助服务
名称:myapp助手服务
名称空间:我的名称空间
地址:
默认后端:默认http后端:80()
规则:
主机路径后端
----                                             ----  --------
myapp-helper-service.example.com
/myapp助手服务:服务端口(172.25.0.207:8080)
活动:
部署的服务是:

$ k describe service/myapp-helper-service
Name:              myapp-helper-service
Namespace:         mynamespace
Labels:            app.kubernetes.io/instance=myapp
                   app.kubernetes.io/managed-by=Helm
                   app.kubernetes.io/name=helper-service
                   app.kubernetes.io/version=2.1
                   helm.sh/chart=helper-service-0.2.3
Annotations:       meta.helm.sh/release-name: myapp
                   meta.helm.sh/release-namespace: mynamespace
Selector:          app.kubernetes.io/instance=myapp,app.kubernetes.io/name=helper-service
Type:              ClusterIP
IP:                10.10.10.61
Port:              service-port  8080/TCP
TargetPort:        8080/TCP
Endpoints:         172.25.0.207:8080
Port:              metrics-port  8081/TCP
TargetPort:        8081/TCP
Endpoints:         172.25.0.207:8081
Session Affinity:  None
Events:            <none>
$k描述服务/myapp助手服务
名称:myapp助手服务
名称空间:mynamespace
标签:app.kubernetes.io/instance=myapp
app.kubernetes.io/managed by=Helm
app.kubernetes.io/name=helper服务
app.kubernetes.io/version=2.1
舵手sh/chart=HELP-service-0.2.3
注释:meta.helm.sh/release-name:myapp
meta.helm.sh/release-namespace:mynamespace
选择器:app.kubernetes.io/instance=myapp,app.kubernetes.io/name=helper服务
类型:集群
IP:10.10.10.61
端口:服务端口8080/TCP
目标端口:8080/TCP
终点:172.25.0.207:8080
端口:metrics端口8081/TCP
目标端口:8081/TCP
终点:172.25.0.207:8081
会话关联:无
活动:


我试图启用/禁用add-Traefik
annotations
以查看是否有任何更改,但结果是相同的(仍然是来自Nginx的404我找到了解决方案

即使入口是被创建的,但显然它并没有真正起作用(或者得到了一些非更好指定的其他默认类)

入口需要缺少显式注释,指定入口类:

添加并重新部署后,入口开始正确捕获我的请求并将它们重定向到
帮助程序服务

注 如果您知道以下情况,请写一条评论:

  • 未指定任何类时,默认类是什么

  • 如何确定已在集群上运行的入口所使用的类


kubectl get ingress
没有显示myapp helper service的地址,尽管myapp并非如此。这正常吗?您能否提供
kubectl Descripte myapp helper service
的结果?ingress
myapp
是否可以正确访问?因为有时k8s中的ingress控制器是设置不好。@g.momo是的,
myapp
是完全可以访问的。主要区别是
myapp
属于服务类型
NodePort
,而
myapp助手服务
属于服务类型
ClusterIP
(我无法更改)但是,据我所知,这并不重要,因为入口指向服务和服务端口。@g.momo您希望
描述什么资源?服务、部署、Pod?(我还添加了部署配置)入口就足够了。顺便问一下,你的描述入口的第四行是什么意思
?defauld后端似乎有些问题。myapp ingress的另一个区别是它似乎也在https上运行。我不依赖默认后端,而是显式地将
/
主机路径分配给后端/服务。
myapp
做了同样的事情,并且入口工作正常。Traefik
https只是一次尝试,我实际上禁用了它;我坚持使用nginx。
$ k get ingresses
NAME                    HOSTS                                             ADDRESS       PORTS     AGE
myapp                   myapp.example.com                                 37.44.1.172   80, 443   116d
myapp-helper-service    myapp-helper-service.example.com                                80        116d
$ k describe ingress/myapp-helper-service
Name:             myapp-helper-service
Namespace:        my-namespace
Address:
Default backend:  default-http-backend:80 (<error: endpoints "default-http-backend" is forbidden: User cannot get resource "endpoints" in API group "" in the namespace "kube-system">)
Rules:
  Host                                             Path  Backends
  ----                                             ----  --------
  myapp-helper-service.example.com
                                                   /   myapp-helper-service:service-port (172.25.0.207:8080)
                                                   Events:                                            <none>
$ k describe service/myapp-helper-service
Name:              myapp-helper-service
Namespace:         mynamespace
Labels:            app.kubernetes.io/instance=myapp
                   app.kubernetes.io/managed-by=Helm
                   app.kubernetes.io/name=helper-service
                   app.kubernetes.io/version=2.1
                   helm.sh/chart=helper-service-0.2.3
Annotations:       meta.helm.sh/release-name: myapp
                   meta.helm.sh/release-namespace: mynamespace
Selector:          app.kubernetes.io/instance=myapp,app.kubernetes.io/name=helper-service
Type:              ClusterIP
IP:                10.10.10.61
Port:              service-port  8080/TCP
TargetPort:        8080/TCP
Endpoints:         172.25.0.207:8080
Port:              metrics-port  8081/TCP
TargetPort:        8081/TCP
Endpoints:         172.25.0.207:8081
Session Affinity:  None
Events:            <none>
annotations:
    kubernetes.io/ingress.class: nginx-external