我已使用nginx入口在Azure上设置了kubernetes集群。导航到特定路径时出现404错误。
我已经建立了一些示例应用程序,这些应用程序返回一个运行良好的简单回声。我的禁令api应用程序始终返回404错误。
当我导航到入口路径时,例如
http://51.145.17.105/apple
工作正常。但是,当我导航到api应用程序时,使用URL出现404错误:
http://51.145.17.105/ban-simple
如果我登录到群集并卷曲禁止简单服务(而不是入口IP),例如
curl -L 10.1.1.40
我得到正确的答复。当我使用nginx入口进行尝试时,出现404错误。
入口映射对我来说似乎正确。这是包含路径的入口Yaml的副本。
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: fruit-ingress
namespace: ban
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/ssl-redirect: "false"
nginx.ingress.kubernetes.io/rewrite-target: /$
spec:
rules:
- http:
paths:
- path: /apple
backend:
serviceName: apple-service
servicePort: 5678
- path: /ban-simple
backend:
serviceName: ban-service
servicePort: 80
“优质”服务的副本是:
kind: Pod
apiVersion: v1
metadata:
name: apple-app
namespace: ban
labels:
app: apple
spec:
containers:
- name: apple-app
image: hashicorp/http-echo
args:
- "-text=apple"
---
kind: Service
apiVersion: v1
metadata:
name: apple-service
namespace: ban
spec:
selector:
app: apple
ports:
- port: 5678 # Default port for image
不起作用的服务是:
kind: Pod
apiVersion: v1
metadata:
name: ban-simple
namespace: ban
labels:
app: ban-simple
spec:
containers:
- name: ban-simple
image: xxxxx.azurecr.io/services/ban
---
kind: Service
apiVersion: v1
metadata:
name: ban-simple-service
namespace: ban
spec:
selector:
app: ban-simple
ports:
- port: 80 # Default port for image
我已经在本地运行容器,并且可以在我的机器上运行。如果确实有所不同,它将确实重定向到localhost / index.html。
任何建议都值得赞赏。
答案 0 :(得分:2)
正如我在您的yaml文件中看到的那样,您将Pod禁令简单的服务名称设置为 ban-simple-service
:
kind: Service
apiVersion: v1
metadata:
name: ban-simple-service
namespace: ban
spec:
selector:
app: ban-simple
ports:
- port: 80 # Default port for image
但是您在入口处将服务名称设置为 ban-service
:
- path: /ban-simple
backend:
serviceName: ban-service
servicePort: 80
我认为这是可能的原因。因此,您需要更改其中一个服务名称以使其相同。
在我看来,我建议您使用部署而不是Pod。因为如果吊舱处于关闭状态,则它处于关闭状态。但是使用部署,它将为您重新创建一个新的。另外,我认为,如果您在容器中公开端口,则yaml文件将更具可读性。
答案 1 :(得分:0)
是由nginx.ingress.kubernetes.io/rewrite-target: /$
引起的。我将其注释掉并解决了该问题。