Kubernetes访问负载均衡器后面的副本

时间:2018-08-14 21:36:05

标签: kubernetes containers load-balancing

我具有以下部署和可与其连接的负载平衡器服务:

apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: slave
spec:
  replicas: 2
  template:
    metadata:
      labels:
        app: slave
    spec:
      containers:
      - name: slave
        envFrom:
        - configMapRef:
            name: my-env-var
        image: registry.azurecr.io/slave:latest
        ports:
        - containerPort: 8080
      imagePullSecrets:
      - name: acr-auth
---
apiVersion: v1
kind: Service
metadata:
  name: slave
spec:
  type: LoadBalancer
  ports:
  - port: 8080
  selector:
    app: slave

我通过“ slave:8080”从另一个部署(称为master)连接到该部署,该从属使用DNS将其解析为IP。因此masterslave发送了一份求职请求。 slave完成一项工作,并以包含指向结果文件链接的响应进行回复。链接类似于slave:8080 / results.txt。因此,主机现在可以下载结果文件。当我有一个slave时,这可以正常工作。现在,我想使用replicas来拥有多个。问题是master如何从某个slave获取结果文件,因为它们都位于负载均衡器的后面。

这是我的slave服务的描述:

Name:                     slave
Namespace:                default
Labels:                   <none>
Annotations:              kubectl.kubernetes.io/last-applied-configuration={"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"name":"slave","namespace":"default"},"spec":{"ports":[{"port":8080}],"selector...
Selector:                 app=slave
Type:                     LoadBalancer
IP:                       10.0.233.16
LoadBalancer Ingress:     41.137.169.141
Port:                     <unset>  8080/TCP
TargetPort:               8080/TCP
NodePort:                 <unset>  32546/TCP
Endpoints:                10.244.0.213:8080,10.244.0.214:8080
Session Affinity:         None
External Traffic Policy:  Cluster
Events:                   <none>

我看到了副本的两个端点,但是它们是内部的,因此无法访问。

那么master如何从执行作业的副本slave获取结果文件?

我想知道在考虑使用固定的卷或其他方法之前是否可以轻松解决问题。

谢谢!

1 个答案:

答案 0 :(得分:1)

对我来说,这闻起来像是一个错误的设计,应该修复它。在您的从属设备中,在pod处理完文件之后-它正在本地保存文件-状态是在本地保存,不是一个好主意。

在处理完作业之后,您应该将文件存储在外部文件中-例如S3或安装在所有Pod上的NFS驱动器。

第二个请求-涉及服务请求文件名的文件时,无论请求转到哪个Pod,该Pod都会从S3存储桶/ NFS驱动器中获取。