这可能最好使用 nginx 代理和 Ingress 的组合来实现。
首先,您使用所需的主机名创建一个入口,并添加一个指向您的 nginx 代理的后端。
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: youringress
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/ssl-redirect: "true"
spec:
tls:
- hosts:
- yourhostname
secretName: yourtlssecret
rules:
- host: yourhostname
http:
paths:
- path: /your-app-path
backend:
serviceName: nginxservice
servicePort: nginxserviceport
路径值可以是一个通用斜杠,它将首先将所有传入请求路由到 nginx 代理服务器,然后根据路径将其转发到相应的服务。每次部署新服务时都不需要更新此入口,因为它的主要职责只是将请求发送到 nginx 代理服务器。
然后,您创建具有多个位置块的 nginx 代理服务器,这些位置块根据 kube-dns 名称将请求路由到集群中的相应服务。
server {
listen 1080;
server_name localhost $hostname;
location /path-to-the-service1 {
proxy_pass http://name-of-service1
}
location /path-to-the-service2 {
proxy_pass http://name-of-service2
}
location /path-to-the-service3 {
proxy_pass http://name-of-service3
}
}
如果您在集群中创建一个名为 frontendservice 的服务,则 nginx 代理服务器可以使用 kube-dns 名称访问它
location /path-to-the-frontendservice {
proxy_pass http://frontendservice
}
您可以继续将您的新部署添加为 nginx 代理服务器中的单独位置块,它将为您处理路由。
然后,您应该能够使用您的网址访问任何服务,例如
http://my-app-url/path-to-the-service/