Docker 主机是否可以重定向到Kubernetes中的服务路径?
我尝试将主机地址与服务路径匹配,例如,让我们假设我有一个nginx pod服务于站点:site1和site2。让我们考虑一个名为my nginx service的服务,它将我的两个站点作为路径提供服务:Docker 主机是否可以重定向到Kubernetes中的服务路径?,docker,kubernetes,google-compute-engine,devops,Docker,Kubernetes,Google Compute Engine,Devops,我尝试将主机地址与服务路径匹配,例如,让我们假设我有一个nginx pod服务于站点:site1和site2。让我们考虑一个名为my nginx service的服务,它将我的两个站点作为路径提供服务: -我的nginx服务(178.123.55.37:80) -/site1 -/site2 有一种方法可以将其映射到以下内容: -主机:site-one.mydomain.com http: 路径: -后端: 服务名称:nginx服务 服务端口:80 服务路径:/site2 -主持人:site-
-我的nginx服务(178.123.55.37:80)
-/site1
-/site2
有一种方法可以将其映射到以下内容:
-主机:site-one.mydomain.com
http:
路径:
-后端:
服务名称:nginx服务
服务端口:80
服务路径:/site2
-主持人:site-two.mydomain.com
http:
路径:
-后端:
服务名称:nginx服务
服务端口:80
服务路径:/site2
??我在文档中没有找到任何关于它的信息。或者也许我对他们不太了解
非常感谢您抽出时间 您可以从下面的
kubectl explain
输出中看到,上面的servicePath
字段不存在(至少在版本1.9.3上)
kubectl解释入口.spec.rules.http.path.backend
:
...
FIELDS:
serviceName <string> -required-
Specifies the name of the referenced service.
servicePort <string> -required-
Specifies the port of the referenced service.
...
。。。
领域:
serviceName-必需-
指定引用的服务的名称。
servicePort-必需-
指定引用服务的端口。
...
您需要在以下字段中指定路径:
ingres.spec.rules.http.paths.path
,以便在命中该路径时,使用在ingres.spec.rules.http.paths.backend.serviceName
中指定的服务路由请求。如果您使用的是nginx或trafficserver ingress,则注释nginx.ingress.kubernetes.io/rewrite-target://
可用于将请求重定向到/
,您可以从kubectl的以下输出中看到解释上面的servicePath
字段不存在(至少在版本1.9.3上)
kubectl解释入口.spec.rules.http.path.backend
:
...
FIELDS:
serviceName <string> -required-
Specifies the name of the referenced service.
servicePort <string> -required-
Specifies the port of the referenced service.
...
。。。
领域:
serviceName-必需-
指定引用的服务的名称。
servicePort-必需-
指定引用服务的端口。
...
您需要在以下字段中指定路径:ingres.spec.rules.http.paths.path
,以便在命中该路径时,使用在ingres.spec.rules.http.paths.backend.serviceName
中指定的服务路由请求。如果您使用的是nginx或trafficserver ingress,则注释nginx.ingress.kubernetes.io/rewrite-target://
可用于将请求重定向到/
您尝试执行的操作(如果我理解正确)是不可能的,因为服务不知道主机名。通过修改pod中的nginx配置,您可能能够达到您想要的效果,但这不是K8s方法
您需要做的是添加入口资源。入口知道主机名。它们在服务之间进行负载平衡。因此,/site1将转到一个服务,而/site2将转到另一个服务
入口应该是这样的:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress
spec:
rules:
- host: site-one.mydomain.com
http:
paths:
- backend:
serviceName: nginx-service1
servicePort: 80
- host: site-two.mydomain.com
http:
paths:
- backend:
serviceName: nginx-service2
servicePort: 80
正如您所看到的,site1和site2将在不同的部署中运行,并有不同的服务针对它们。Ingress是L7负载平衡器,它能够检查主机名并将请求转发到正确的服务,最终将命中正确的pod
您还可以向每个主机添加路径,以便将site-one.mydomain.com/path1、site-one.mydomain.com/path2和site-two.mydomain.com/path1(例如)转发到不同的服务
入口yaml文件如下所示:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress
spec:
rules:
- host: site-one.mydomain.com
http:
paths:
- path: /path1
backend:
serviceName: nginx-service1
servicePort: 80
- path: /path2
backend:
serviceName: nginx-service2
servicePort: 8080
- path: /
backend:
serviceName: nginx-service3
servicePort: 80
- host: site-two.mydomain.com
http:
paths:
- path: /path1
backend:
serviceName: nginx-service1
servicePort: 80
我知道这不是你想要的,但这是实现你想要的正确方法 您试图做的事情(如果我理解正确的话)是不可能的,因为服务不知道主机名。通过修改pod中的nginx配置,您可能能够达到您想要的效果,但这不是K8s方法
您需要做的是添加入口资源。入口知道主机名。它们在服务之间进行负载平衡。因此,/site1将转到一个服务,而/site2将转到另一个服务
入口应该是这样的:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress
spec:
rules:
- host: site-one.mydomain.com
http:
paths:
- backend:
serviceName: nginx-service1
servicePort: 80
- host: site-two.mydomain.com
http:
paths:
- backend:
serviceName: nginx-service2
servicePort: 80
正如您所看到的,site1和site2将在不同的部署中运行,并有不同的服务针对它们。Ingress是L7负载平衡器,它能够检查主机名并将请求转发到正确的服务,最终将命中正确的pod
您还可以向每个主机添加路径,以便将site-one.mydomain.com/path1、site-one.mydomain.com/path2和site-two.mydomain.com/path1(例如)转发到不同的服务
入口yaml文件如下所示:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress
spec:
rules:
- host: site-one.mydomain.com
http:
paths:
- path: /path1
backend:
serviceName: nginx-service1
servicePort: 80
- path: /path2
backend:
serviceName: nginx-service2
servicePort: 8080
- path: /
backend:
serviceName: nginx-service3
servicePort: 80
- host: site-two.mydomain.com
http:
paths:
- path: /path1
backend:
serviceName: nginx-service1
servicePort: 80
我知道这不是你想要的,但这是实现你想要的正确方法 也许我没有正确地解释自己。我希望能够从kubernetes主机访问服务的路径,因此如果我要公开我的服务,那么到端点的路由将是:IP:80/site1。但是我想把这个路径映射到一个入口主机,比如siteone.mydomain.com。我认为您所说的是将服务映射到入口路径,这不是我想要的情况,但谢谢!啊,很抱歉,是的,我想我误解了这个问题,也许我没有正确地解释我自己。我希望能够从kubernetes主机访问服务的路径,因此如果我要公开我的服务,那么到端点的路由将是:IP:80/site1。但是我想把这个路径映射到一个入口主机,比如siteone.mydomain.com。我认为您所说的是将服务映射到入口路径,这不是我想要的情况,但谢谢!啊,很抱歉,是的,我想我误解了这个问题好吧,非常感谢,也许我的思维结构不正确,因为我是这种技术的新手。最好的!好的,非常感谢,也许我的想法是