如何设置属性文件的动态IP?

时间:2019-06-11 15:34:20

标签: kubernetes kubernetes-pod

我部署了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映像。

1 个答案:

答案 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