如何使用Ingress加载静态文件

问题描述 投票:0回答:1

最近,我一直在尝试学习一些 Kubernetes,所以我决定创建一个带有静态图像的简单 Nginx 页面来测试它

holysemicolon/uwu-nginx:1.0

我注意到,当我使用 ingress 获取带有

ClusterType
作为 nginx 服务类型的 Nginx 页面时,静态图像不会加载
404 not found
,但是当我使用
NodePort
公开服务而不需要 ingress 时,图像会成功加载.

请注意,当我尝试直接使用 ingress 获取图像时

192.168.42.110/Holy_semicolon.png
它会毫无问题地获取。

顺便说一句,您必须传递标头

Host:app1.com
才能工作,或者
curl -H "Host:app1.com" 192.168.42.110

这里,更改服务类型后使用

type: NodePort

顺便说一句,HTML 页面和图像位于同一目录中

/var/www/html
您可以在 nginx 容器中执行 bash。

静态图像在 HTML 页面中被调用,如下所示

<IMG SRC= "./Holy_semicolon.png">

这是我的文件:

app-one.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: app-one
spec:
  selector:
    matchLabels:
      app: app-one
  replicas: 1
  template:
    metadata:
      labels:
        app: app-one
    spec:
      containers:
      - name: app-one
        image: holysemicolon/uwu-nginx:1.0
        ports:
        - containerPort: 80

app-one-service.yaml:

apiVersion: v1
kind: Service
metadata:
  name: app-one
spec:
  selector:
    app: app-one
  ports:
  - name: http
    port: 80
    targetPort: 80
  type: ClusterIP
#type: NodePort

ingress.yaml:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-app-ingress
  namespace: default
  #annotations:
    #nginx.ingress.kubernetes.io/use-regex: "true"
    #nginx.ingress.kubernetes.io/rewrite-target: /Enjine/$1
spec:
  rules:
  - host: app1.com  #Host Name 
    http:
      paths:
      - pathType: Prefix
        path: /
        backend:
          service:
            name: app-one
            port:
              number: 80
$  kubectl get all
NAME                           READY   STATUS    RESTARTS   AGE
pod/app-one-78b7874867-g2b92   1/1     Running   0          6m46s

NAME                 TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)   AGE
service/kubernetes   ClusterIP   10.43.0.1     <none>        443/TCP   165m
service/app-one      ClusterIP   10.43.23.19   <none>        80/TCP    6m42s

NAME                      READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/app-one   1/1     1            1           6m46s

NAME                                 DESIRED   CURRENT   READY   AGE
replicaset.apps/app-one-78b7874867   1         1         1       6m46s
$ kubectl get node -o wide
NAME       STATUS   ROLES                  AGE    VERSION        INTERNAL-IP      EXTERNAL-IP   OS-IMAGE                KERNEL-VERSION                CONTAINER-RUNTIME
iltafahs   Ready    control-plane,master   3h2m   v1.28.5+k3s1   192.168.42.110   <none>        CentOS Linux 7 (Core)   3.10.0-1160.99.1.el7.x86_64   containerd://1.7.11-k3s2

kubernetes nginx kubernetes-ingress
1个回答
0
投票

我想我发现了问题,经过大量调试后,我尝试在

Opera
浏览器中打开nginx页面并且它有效,因此我正在使用
Edge

我比较了两种浏览器中的网络页面,看看为什么它可以在一个浏览器上运行,而另一个却不能,我发现问题出在

Host
标题上,如下图所示:

边缘

Host: 192.168.42.110

歌剧

Host: app1.com

主机头我使用浏览器扩展设置它,所以当我调用主节点IP

192.168.42.110
时,入口将知道要提供哪个服务, 这就像仅为主页设置主机标头
Host:app1.com
,但对于其他子 URL 调用,例如
http://192.168.42.110/Holy_semicolon.png
,未设置标头,“仅在 Edge 中”

© www.soinside.com 2019 - 2024. All rights reserved.