我部署了2个需要与另一个Pod对话的Pod(假设Pod A)。 Pod A要求已部署Pod的服务的IP地址。因此,我需要在Pod A所需的配置属性文件中设置这些IP地址。 由于IP地址是动态的,也就是说,如果pod崩溃了,它会被更改。因此,需要动态设置它。
当前,我部署了2个Pod,并进行了
kubectl get ep
并在配置属性文件中设置这些IP地址,并构建Dockerfile并将其推送并使用该映像进行部署。
这是我的deply和svc文件,其中djtijare / a2ipricing图像是指配置文件
apiVersion: v1
kind: Service
metadata:
name: spring-boot-demo-pricing
spec:
ports:
- name: spring-boot-pricing
port: 8084
targetPort: 8084
selector:
app: spring-boot-demo-pricing
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: spring-boot-demo-pricing
spec:
replicas: 1
template:
metadata:
labels:
app: spring-boot-demo-pricing
spec:
containers:
- name: spring-boot-demo-pricing
image: djtijare/a2ipricing:v1
imagePullPolicy: IfNotPresent
# envFrom:
#- configMapRef:
# name: spring-boot-demo-config-map
resources:
requests:
cpu: 100m
memory: 1Gi
ports:
- containerPort: 8084
nodeSelector:
disktype: ssd
所以如何在配置文件中动态设置这两个Pod的IP,以及构建和推送Docker映像。
答案 0 :(得分:0)
我认为您应该考虑使用Headless services。
有时您不需要或不需要负载平衡和单个服务IP。在这种情况下,可以通过为群集IP(
"None"
)明确指定.spec.clusterIP
来创建所谓的“无头”服务。您可以使用无头服务与其他服务发现机制进行接口,而不必与Kubernetes的实现捆绑在一起。例如,您可以实现一个自定义的[Operator](以此API为基础。
对于这样的
Services
,未分配群集IP,kube-proxy无法处理这些服务,并且平台没有为它们完成负载平衡或代理。如何自动配置DNS取决于服务是否已定义选择器。
例如,如果您将服务设置为spec.clusterIP = None
,则可以使用nslookup -type=A spring-boot-demo-pricing
,它将向您显示与此pods
连接的service
的IP。
/ # nslookup -type=A spring-boot-demo-pricing
Server: 10.11.240.10
Address: 10.11.240.10:53
Name: spring-boot-demo-pricing.default.svc.cluster.local
Address: 10.8.2.20
Name: spring-boot-demo-pricing.default.svc.cluster.local
Address: 10.8.1.12
Name: spring-boot-demo-pricing.default.svc.cluster.local
Address: 10.8.1.13
这是我用过的yaml
:
apiVersion: v1
kind: Service
metadata:
name: spring-boot-demo-pricing
labels:
app: spring-boot-demo-pricing
spec:
ports:
- name: spring-boot-pricing
port: 8084
targetPort: 8084
clusterIP: None
selector:
app: spring-boot-demo-pricing
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: spring-boot-demo-pricing
labels:
app: spring-boot-demo-pricing
spec:
replicas: 3
selector:
matchLabels:
app: spring-boot-demo-pricing
template:
metadata:
labels:
app: spring-boot-demo-pricing
spec:
containers:
- name: spring-boot-demo-pricing
image: djtijare/a2ipricing:v1
imagePullPolicy: IfNotPresent
# envFrom:
#- configMapRef:
# name: spring-boot-demo-config-map
resources:
requests:
cpu: 100m
memory: 1Gi
ports:
- containerPort: 8084