我有一个使用相对href链接的网站(例如,该链接指向“ / login”,而不是“ http://somesite.com/login”)。这在普通服务器上可以正常工作,但我想在Docker容器内使用网站作为kubernetes集群的一部分。我的目标是拥有多个网站副本来管理高负载时间,默认情况下将两个副本进行动态扩展。
我将服务设置为“负载平衡器”,如下所示:
apiVersion: v1
kind: Service
metadata:
name: websiteservice
spec:
selector:
app: websiteapp
type: LoadBalancer
ports:
- protocol: TCP
port: 80
targetPort: 80
这里的问题是,如果我导航到负载平衡器的URL(在我的主机上自动创建-数字海洋),则尽管网站的主页已加载,但其他任何页面都会给我一个404,因为而不是加载容器的“ / login”页面将加载不存在的负载均衡器的“ / login”页面。如何配置群集或负载平衡器以将所有子目录(.com之后的任何内容)转发到Web服务器?
编辑1 在评论中,建议我设置入口。我认为我已经完成了对Yaml的更改:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: test-ingress
annotations:
kubernetes.io/ingress.class: nginx
spec:
rules:
- host: somesite.co.uk
http:
paths:
- backend:
serviceName: websiteservice
servicePort: 80
---
apiVersion: v1
kind: Service
metadata:
name: websiteservice
spec:
selector:
app: websiteapp
type: ClusterIP
ports:
- protocol: TCP
port: 80
targetPort: 80
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: websiteapp
spec:
replicas: 2
selector:
matchLabels:
app: websiteapp
template:
metadata:
labels:
app: websiteapp
spec:
containers:
- name: websiteapp
image: mydocker.co.uk/websiteimg
imagePullSecrets:
- name: regcred
nodeSelector:
beta.kubernetes.io/instance-type: s-2vcpu-4gb
但是我仍然无法导航到网站首页之外。
答案 0 :(得分:1)
您的Ingress文件应如下所示:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: test-ingress
annotations:
kubernetes.io/ingress.class: nginx
spec:
rules:
- host: somesite.co.uk
http:
paths:
- path: /*
backend:
serviceName: websiteservice
servicePort: 80
只需添加路径即可重定向流量。