最近,我一直在尝试学习一些 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
我想我发现了问题,经过大量调试后,我尝试在
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 中”