Kubernetes 库伯内特斯入口酒店
我在做一些关于入口的研究,似乎我必须为每个名称空间创建一个新的入口资源。对吗 我刚刚在GKE集群的不同名称空间中创建了两个独立的入口资源,但它似乎使用了相同的LB in(这对于成本来说是非常好的),但我认为可能会有冲突。(使用相同路径时)。我刚刚试过,我创建的第一个仍然在路径上工作,同一路径上的另一个新的不工作Kubernetes 库伯内特斯入口酒店,kubernetes,Kubernetes,我在做一些关于入口的研究,似乎我必须为每个名称空间创建一个新的入口资源。对吗 我刚刚在GKE集群的不同名称空间中创建了两个独立的入口资源,但它似乎使用了相同的LB in(这对于成本来说是非常好的),但我认为可能会有冲突。(使用相同路径时)。我刚刚试过,我创建的第一个仍然在路径上工作,同一路径上的另一个新的不工作 有人能给我解释一下入口的正确设置吗?冲突入口路由的行为未定义且依赖于实现。在大多数情况下,这只是最后一个写入程序获胜。冲突入口路由的行为未定义且依赖于实现。在大多数情况下,这只是最后一个
有人能给我解释一下入口的正确设置吗?冲突入口路由的行为未定义且依赖于实现。在大多数情况下,这只是最后一个写入程序获胜。冲突入口路由的行为未定义且依赖于实现。在大多数情况下,这只是最后一个写入程序获胜。当Kubernetes工作时,ingress controller不会将数据包传递给与ingress资源位于不同命名空间中的服务。因此,如果在默认名称空间中创建入口资源,则所有服务也必须在默认名称空间中 这是不会改变的。曾经几年前就有一个特性请求,kubernetes团队宣布这不会发生。当入口控制器能够传输名称空间时,它引入了一个安全漏洞 现在,我们在这些情况下所做的实际上是相当整洁的。您必须执行以下操作:
service1.foo
和service2.bar
service1.foo
和service2.bar
的IP地址的Endpoint
对象。不带选择器的headless服务将强制kube dns(或coreDNS)搜索ExternalName
类型服务或端点
对象。现在,这里唯一的要求是您的headless服务和Endpoint
对象必须具有相同的名称service1.foo
的IP地址是10.10.10.10
。您的无头服务和端点
对象将是:
apiVersion: v1
kind: Service
metadata:
name: bait-svc
spec:
clusterIP: None
ports:
- name: http
port: 80
targetPort: 80
---
apiVersion: v1
kind: Endpoints
metadata:
name: bait-svc
subsets:
- addresses:
- ip: 10.10.10.10
ports:
- port: 80
protocol: TCP
和入口
资源:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress
annotations:
kubernetes.io/ingress.class: "nginx"
spec:
tls:
- secretName: ssl-certs
rules:
- host: site1.training.com
http:
paths:
- path: /
backend:
serviceName: bait-svc
servicePort: 80
因此,incres
指向bait svc
,bait svc
指向service1.foo
。您将为每个服务执行此操作
更新
我现在在想,它可能不适用于GKE Ingress Controller,因为在GKE上,HTTP负载平衡器需要一个NodePort
类型的服务来访问该服务。如您所见,在我的示例中,我使用了nginx入口控制器
不管它是否工作,我都建议使用其他入口控制器。并不是说GKE IC不好。它非常健壮,但几乎总是会遇到一些限制。其他IC更灵活。随着Kubernetes的工作,ingress controller不会将数据包传递给与ingress资源位于不同命名空间中的服务。因此,如果在默认名称空间中创建入口资源,则所有服务也必须在默认名称空间中 这是不会改变的。曾经几年前就有一个特性请求,kubernetes团队宣布这不会发生。当入口控制器能够传输名称空间时,它引入了一个安全漏洞 现在,我们在这些情况下所做的实际上是相当整洁的。您必须执行以下操作:
service1.foo
和service2.bar
service1.foo
和service2.bar
的IP地址的Endpoint
对象。不带选择器的headless服务将强制kube dns(或coreDNS)搜索ExternalName
类型服务或端点
对象。现在,这里唯一的要求是您的headless服务和Endpoint
对象必须具有相同的名称service1.foo
的IP地址是10.10.10.10
。您的无头服务和端点
对象将是:
apiVersion: v1
kind: Service
metadata:
name: bait-svc
spec:
clusterIP: None
ports:
- name: http
port: 80
targetPort: 80
---
apiVersion: v1
kind: Endpoints
metadata:
name: bait-svc
subsets:
- addresses:
- ip: 10.10.10.10
ports:
- port: 80
protocol: TCP
和入口
资源:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress
annotations:
kubernetes.io/ingress.class: "nginx"
spec:
tls:
- secretName: ssl-certs
rules:
- host: site1.training.com
http:
paths:
- path: /
backend:
serviceName: bait-svc
servicePort: 80
因此,incres
指向bait svc
,bait svc
指向service1.foo
。您将为每个服务执行此操作
更新
我现在在想,它可能不适用于GKE Ingress Controller,因为在GKE上,HTTP负载平衡器需要一个NodePort
类型的服务来访问该服务。如您所见,在我的示例中,我使用了nginx入口控制器
不管它是否工作,我都建议使用其他入口控制器。并不是说GKE IC不好。它非常健壮,但几乎总是会遇到一些限制。其他IC更灵活。您是否对两个入口使用相同的主机名?啊,是的(只是*),可能是因为它使用相同的LB?我们不能使用相同的主机名创建多个入口,如果我们这样做,将会发生冲突。因此,我建议为每个入口配置不同的主机名(而不是*)。好的,我必须为每个名称空间的每个主机名创建一个入口?没错。入口是命名空间级别的对象。如果您的K8s版本>1.18.*您可以使用一个通配符作为主机名。您是否对两个入口使用相同的主机名?啊,是的(只是*),可能是因为它使用相同的LB?我们不能