我只想知道,在Kubernetes服务定义中是否可以引用服务而不是部署(使用服务标签而不是部署matchLabels)?
我的意思是,假设我定义了一个服务A,它公开了一个部署AD,现在我想定义另一个服务B,但是这次不是它的选择器指向一个部署AD,而是希望它指向先前定义的服务,即服务A?在Kubernetes中甚至可能吗?例如,请参见下面的场景
**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
答案 0 :(得分:1)
是的,有可能!不过不是通过选择器。
您有一个服务指向Pod A-D,您有一个IP地址。您可以使用该IP地址创建一个Endpoints
对象。然后,您可以创建一个headless service
,其中不包含与Endpoints
对象同名的选择器。
示例:
说您的服务IP地址(指向Depoyments A-D的那个)是10.0.0.10。创建Endpoints
对象:
apiVersion: v1
kind: Endpoints
metadata:
name: my-headless-service
subsets:
- addresses:
- ip: 10.0.0.10
ports:
- port: 80
protocol: TCP
现在,创建与Endpoints
对象同名的无头服务。请注意,它没有标签选择器,因此它没有选择任何后端。发生这种情况时,请求将发送到DNS,然后它将在其中搜索具有相同名称的en ExternalName
类型服务或具有相同名称的Endpoints
对象。
apiVersion: v1
kind: Service
metadata:
name: my-headless-service
spec:
clusterIP: None
ports:
- name: http
port: 80
targetPort: 80
解析发生在DNS,而不是iptables。
答案 1 :(得分:0)
不可能。选择器只需选择窗格标签。