如何使用k8s入口服务通过一个端口服务多个解决方案webui
How to service multiple solution webui through one port using k8s ingress service
我需要基于 URL 使用一个使用 k8s ingress 的开放端口为 gitlab、nexus 和 jupyterhub 提供服务。
如果在create ingress的时候把路径写成“/”,是可以正常使用的,但是如果这样写“/nexus”,在重定向的过程中就会出现问题。
你们有没有人解决过同样的问题?请帮忙
我的ingress.yaml如下
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
creationTimestamp: "2022-04-06T05:56:40Z"
generation: 7
name: nexus-ing
namespace: nexus
resourceVersion: "119075924"
selfLink: /apis/extensions/v1beta1/namespaces/nexus/ingresses/nexus-ing
uid: 4b4f97e4-225e-4faa-aba3-6af73f69c21d
spec:
ingressClassName: nginx
rules:
- http:
paths:
- backend:
serviceName: nexus-service
servicePort: 8081
path: /nexus(/|$)(.*)
pathType: ImplementationSpecific
status:
loadBalancer:
ingress:
- ip: 172.30.1.87
这是nexus本身的问题。您的入口按预期工作,您无法从这方面做更多事情。
这里的问题是 nexus 网页,即 index.html,以这样一种方式请求资源,它正在寻找错误的地方。您可以通过打开网络选项卡并检查缺少静态信息的请求 URL 来查看。
为了明白我的意思,让我们检查下面的 HTML 个图片标签。
<img id="1" src="./statics/some-image.svg" alt="some image" />
<img id="2" src="/statics/some-image.svg" alt="some image" />
您可以看到第一个正在使用相对路径,并且可以与您的配置一起使用,因为请求 URL 将相对于浏览器中的位置,然后 nexus 部分被入口控制器。
然而,第二个使用的是绝对路径,所以它在请求中不会有连接部分URL并且入口控制器将无法将其路由到正确的服务。
这是剥离路径前缀时的常见问题。只有在正确配置剥离前缀时所服务的应用程序时,它才能完全工作。
在你的情况下,这意味着检查服务的文档,如果你有办法影响它。
基于主机名而不是路径进行路由可能更直接。即 nexus.myhost.com
。为此,您需要一个域并将相应的 A 记录指向您的入口服务 IP/使用通配符记录。
我自己解决这个问题
- 我编辑了我的电脑主机文件
172.30.1.87 nexus.k8s.io
172.30.1.87 gitlab.k8s.io
- 我编辑了同一个服务命名空间中的每个 Ingress
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
namespace: nexus
spec:
ingressClassName: nginx
rules:
- host: nexus.k8s.io
http:
paths:
- backend:
serviceName: nexus-service
servicePort: 8081
path: /
status:
loadBalancer:
ingress:
- ip: 172.30.1.87
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
name: gitlab-ingress
namespace: gitlab
spec:
ingressClassName: nginx
rules:
- host: gitlab.k8s.io
http:
paths:
- backend:
serviceName: gitlab-webservice
servicePort: 8181
path: /
status:
loadBalancer:
ingress:
- ip: 172.30.1.87
- 连接测试
入口主机名 + 入口控制器节点端口
我需要基于 URL 使用一个使用 k8s ingress 的开放端口为 gitlab、nexus 和 jupyterhub 提供服务。
如果在create ingress的时候把路径写成“/”,是可以正常使用的,但是如果这样写“/nexus”,在重定向的过程中就会出现问题。
你们有没有人解决过同样的问题?请帮忙
我的ingress.yaml如下
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
creationTimestamp: "2022-04-06T05:56:40Z"
generation: 7
name: nexus-ing
namespace: nexus
resourceVersion: "119075924"
selfLink: /apis/extensions/v1beta1/namespaces/nexus/ingresses/nexus-ing
uid: 4b4f97e4-225e-4faa-aba3-6af73f69c21d
spec:
ingressClassName: nginx
rules:
- http:
paths:
- backend:
serviceName: nexus-service
servicePort: 8081
path: /nexus(/|$)(.*)
pathType: ImplementationSpecific
status:
loadBalancer:
ingress:
- ip: 172.30.1.87
这是nexus本身的问题。您的入口按预期工作,您无法从这方面做更多事情。
这里的问题是 nexus 网页,即 index.html,以这样一种方式请求资源,它正在寻找错误的地方。您可以通过打开网络选项卡并检查缺少静态信息的请求 URL 来查看。
为了明白我的意思,让我们检查下面的 HTML 个图片标签。
<img id="1" src="./statics/some-image.svg" alt="some image" />
<img id="2" src="/statics/some-image.svg" alt="some image" />
您可以看到第一个正在使用相对路径,并且可以与您的配置一起使用,因为请求 URL 将相对于浏览器中的位置,然后 nexus 部分被入口控制器。
然而,第二个使用的是绝对路径,所以它在请求中不会有连接部分URL并且入口控制器将无法将其路由到正确的服务。
这是剥离路径前缀时的常见问题。只有在正确配置剥离前缀时所服务的应用程序时,它才能完全工作。
在你的情况下,这意味着检查服务的文档,如果你有办法影响它。
基于主机名而不是路径进行路由可能更直接。即 nexus.myhost.com
。为此,您需要一个域并将相应的 A 记录指向您的入口服务 IP/使用通配符记录。
我自己解决这个问题
- 我编辑了我的电脑主机文件
172.30.1.87 nexus.k8s.io
172.30.1.87 gitlab.k8s.io
- 我编辑了同一个服务命名空间中的每个 Ingress
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
namespace: nexus
spec:
ingressClassName: nginx
rules:
- host: nexus.k8s.io
http:
paths:
- backend:
serviceName: nexus-service
servicePort: 8081
path: /
status:
loadBalancer:
ingress:
- ip: 172.30.1.87
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
name: gitlab-ingress
namespace: gitlab
spec:
ingressClassName: nginx
rules:
- host: gitlab.k8s.io
http:
paths:
- backend:
serviceName: gitlab-webservice
servicePort: 8181
path: /
status:
loadBalancer:
ingress:
- ip: 172.30.1.87
- 连接测试 入口主机名 + 入口控制器节点端口