0

使用以下入口,我的应用程序可以工作,但如果我删除“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
4

0 回答 0