【问题标题】:How to set dynamic IP to property file?如何将动态 IP 设置为属性文件?
【发布时间】:2019-06-11 15:34:20
【问题描述】:

我已经部署了 2 个 pod,它们需要与另一个 pod(比如说 Pod A)通信。 Pod A 需要已部署 Pod 的服务的 IP 地址。所以我需要在 Pod A 所需的配置属性文件中设置这些 IP 地址。 由于 IP 地址是动态的,即如果 pod 崩溃,它会被更改。所以需要动态设置它。

目前我部署了 2 个 pod 并做

kubectl get ep

并在配置属性文件中设置这些 IP 地址并构建 Dockerfile 并推送它并使用该映像进行部署。

这是我的 deplyment 和 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

那么如何在配置文件中动态设置这 2 个 pod 的 IP 并构建和推送 docker 映像。

【问题讨论】:

  • 你可以使用服务的DNS名称spring-boot-demo-pricing吗?
  • 如何检查?
  • curl spring-boot-demo-pricing 不工作

标签: kubernetes kubernetes-pod


【解决方案1】:

我认为你应该考虑使用Headless services。

有时您不需要或不想要负载平衡和单个服务 IP。在这种情况下,您可以通过为集群 IP (.spec.clusterIP) 显式指定 "None" 来创建所谓的“无头”服务。

您可以使用无头服务与其他服务发现机制进行交互,而无需绑定到 Kubernetes 的实现。例如,您可以在此 API 的基础上实现自定义 [Operator](。

对于这样的Services,没有分配集群IP,kube-proxy不处理这些服务,平台也没有为它们做负载均衡或代理。 DNS 如何自动配置取决于服务是否定义了选择器。

例如,如果您将服务设置为spec.clusterIP = None,您可以使用nslookup -type=A spring-boot-demo-pricing,这将显示pods 的IP 地址附加到此service。

/ # 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-20
    • 1970-01-01
    • 2013-01-07
    • 2018-09-02
    • 1970-01-01
    • 2014-05-12
    相关资源
    最近更新 更多