使用以下入口,我的应用程序可以工作,但如果我删除“nginx.ingress.kubernetes.io/rewrite-target: /$1”,它就不起作用并出现 404 错误。如果我通过 port-forward service/hello_service 8080:80 -n hello_world 转发到本地 kubectl,我可以通过 http://localhost:8080/ 访问它。对于入口,我使用http://my.example.url/hello_service/. 但是,如果我不包括重写,则入口不起作用。我认为它会起作用,因为它只是点击基本 url,而不是需要在上游重写的 url。有没有办法让入口在不重写的情况下工作?就像我在烧瓶应用程序中缺少的一些设置或配置一样?还是我完全误解了入口和重写以及发生了什么?还有其他应用程序可以在没有重写的情况下工作,我会在其中访问基本 url,所以这就是我转过头的原因。希望对可能发生的事情和我的各种选择有一些澄清,以便我理解这一点。
这是一个基本的精简示例,我放在一起试图弄清楚。我刚刚编写的示例网址。我有自己的 url 实际被使用。
入口
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: hello_ingress
namespace: hello_world
annotations:
kubernetes.io/ingress.class: "nginx"
nginx.org/mergeable-ingress-type: "minion"
nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
rules:
- host: my.example.url
http:
paths:
- path: /hello_service/(.*)
backend:
serviceName: hello_service
servicePort: 80
服务
apiVersion: v1
metadata:
name: hello_service
namespace: hello_world
spec:
ports:
- name: http
protocol: TCP
port: 80
targetPort: 8080
selector:
app: hello_world_app
type: ClusterIP
sessionAffinity: None
DockerFile
FROM python:3
WORKDIR /usr/src/app
COPY hello_world.py /usr/src/app
COPY Dockerfile /usr/src/app
RUN pip install flask flask-restplus
EXPOSE 8080
CMD [ "python3", "hello_world.py"]
hello_world.py
from flask import Flask
import os
import socket
app = Flask(__name__)
@app.route('/')
def hello():
return 'Hello World from host \"%s\".\n' % socket.gethostname()
if __name__ == "__main__":
app.run(host="0.0.0.0", port=8080, debug=True)
enter code here