Kubernetes服务选择器用于选择其他服务而不是部署?
我只是想知道,在Kubernetes服务定义中是否可以引用服务而不是部署(使用服务标签而不是部署匹配标签) 我想说的是,假设我定义了一个服务a,它公开了一个部署a-D,现在我想定义另一个服务B,但这次不是它的选择器引用部署a-D,而是我想它指向以前定义的服务,即服务a?这在库伯内特斯可能吗?有关示例,请参见下面的场景Kubernetes服务选择器用于选择其他服务而不是部署?,kubernetes,kubernetes-service,kubernetes-deployment,Kubernetes,Kubernetes Service,Kubernetes Deployment,我只是想知道,在Kubernetes服务定义中是否可以引用服务而不是部署(使用服务标签而不是部署匹配标签) 我想说的是,假设我定义了一个服务a,它公开了一个部署a-D,现在我想定义另一个服务B,但这次不是它的选择器引用部署a-D,而是我想它指向以前定义的服务,即服务a?这在库伯内特斯可能吗?有关示例,请参见下面的场景 **Deployment A-D** apiVersion: apps/v1 kind: Deployment metadata: name: my-nginx spec:
**Deployment A-D**
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-nginx
spec:
selector:
matchLabels:
run: my-nginx
replicas: 2
template:
metadata:
labels:
run: my-nginx
spec:
containers:
- name: my-nginx
image: nginx
ports:
- containerPort: 80
**ServiceA**
apiVersion: v1
kind: Service
metadata:
name: my-nginx
labels:
run: my-nginx-1
spec:
ports:
- port: 80
protocol: TCP
selector:
run: my-nginx
**ServiceB**
apiVersion: v1
kind: Service
metadata:
name: my-nginx-wrapper-service
labels:
run: my-nginx-2
spec:
ports:
- port: 80
protocol: TCP
selector:
run: my-nginx-1 //service label instead of deployment
更新:
headless service
apiVersion: v1
kind: Service
metadata:
name: access-service
annotations:
getambassador.io/config: |
---
apiVersion: ambassador/v1
kind: Mapping
name: productreadservice-mapping
prefix: /Apps/ProductReadService/.*
prefix_regex: true
rewrite: ""
service: access-service:80
spec:
clusterIP: None
ports:
- name: http
port: 80
targetPort: 8082
endpoint object
apiVersion: v1
kind: Endpoints
metadata:
name: access-service
subsets:
- addresses:
- ip: ip of the service i wish to access
ports:
- port: 8082
protocol: TCP
这是不可能的。选择器只需选择吊舱标签 是的,这是可能的!但不是通过选择器 如果你的服务指向吊舱A-D,你就有一个IP地址。您可以使用该IP地址创建一个
Endpoints
对象。然后,您可以创建一个无头服务
,而不使用与端点
对象同名的选择器
例如:
假设您的服务IP地址(指向Depoyments A-D的地址)是10.0.0.10。创建端点
对象:
apiVersion: v1
kind: Endpoints
metadata:
name: my-headless-service
subsets:
- addresses:
- ip: 10.0.0.10
ports:
- port: 80
protocol: TCP
现在,使用与端点
对象相同的名称创建headless服务。请注意,它没有标签选择器,因此不选择任何后端。发生这种情况时,请求被发送到DNS,在那里它将搜索具有相同名称的enExternalName
type服务或具有相同名称的Endpoints
对象
apiVersion: v1
kind: Service
metadata:
name: my-headless-service
spec:
clusterIP: None
ports:
- name: http
port: 80
targetPort: 80
解析是在DNS上进行的,而不是在iptables上。这是否适用于Ambassada,因为看起来我的headless服务没有被ambassador发现是的,它应该适用于所有用例。你是说从大使那里你联系不到服务?你是如何提出请求的?我的意思是,根据你的建议,我创建了一个没有任何选择器的无头服务,并为它创建了带有大使注释的映射,但当我尝试访问它时,它给出了服务不可用错误503哦,我以为你有一个侧车容器。不确定大使是如何提出请求的。当您设置服务的FQDN(svc name.namespace.svc.cluster.local)时,它也会抛出一个错误。我指的是kubernetes本机api网关