У нас есть настройка в GKE с двумя разными кластерами. В одном кластере работает nfs-сервер, и в этом кластере у нас есть постоянный том, который указывает на сервер. Этот PV затем устанавливается на модуль, работающий на этом кластере. Второй кластер также имеет PV и модуль, который должен монтировать тот же том NFS. Здесь возникает проблема. Где мы указываем на сервер, он не работает с использованием адреса кластера nfs-сервера. Это понятно, но мне интересно, как лучше всего этого достичь.
Установка в основном такая:
Заявка о постоянном объеме и постоянном объеме, используемая NFS
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs-pv
spec:
capacity:
storage: 20Gi
storageClassName: manual
accessModes:
- ReadWriteMany
gcePersistentDisk:
pdName: files
fsType: ext4
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: nfs-pvc
spec:
storageClassName: manual
accessModes:
- ReadWriteMany
resources:
requests:
storage: 20Gi
Развертывание NFS-сервера
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: nfs-server
spec:
replicas: 1
selector:
matchLabels:
role: nfs-server
template:
metadata:
labels:
role: nfs-server
spec:
containers:
- name: nfs-server
image: gcr.io/google_containers/volume-nfs:0.8
ports:
- name: nfs
containerPort: 2049
- name: mountd
containerPort: 20048
- name: rpcbind
containerPort: 111
securityContext:
privileged: true
volumeMounts:
- mountPath: /exports
name: mypvc
volumes:
- name: mypvc
persistentVolumeClaim:
claimName: nfs-pvc
Служба NFS-сервера
apiVersion: v1
kind: Service
metadata:
name: nfs-server
spec:
ports:
- name: nfs
port: 2049
- name: mountd
port: 20048
- name: rpcbind
port: 111
selector:
role: nfs-server
Постоянный объем и Запрос постоянного объема, используемый модулями:
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs
spec:
capacity:
storage: 20Gi
storageClassName: manual
accessModes:
- ReadWriteMany
nfs:
server: 10.4.0.20
path: "/"
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: nfs
spec:
storageClassName: manual
accessModes:
- ReadWriteMany
resources:
requests:
storage: 20Gi
Часть файла развертывания для подключения модуля nfs
volumes:
- name: files
persistentVolumeClaim:
claimName: nfs
Вывод kubectl get pv и kubectl get pvc
user@HP-EliteBook:~/Downloads$ kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
nfs 100Gi RWX Retain Bound default/nfs manual 286d
nfs-pv 100Gi RWO Retain Bound default/nfs-pvc manual 286d
user@HP-EliteBook:~/Downloads$ kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
nfs Bound nfs 100Gi RWX manual 286d
nfs-pvc Bound nfs-pv 100Gi RWO manual 286d
Проблема в том, что ip в PV используется стручками. Модуль в том же кластере может подключаться к нему, но не модуль в другом кластере. Я могу использовать реальный podIP из другого кластера, но podIP меняется с каждым развертыванием, так что это не рабочее решение. Как лучше всего обойти эту проблему, я только хочу, чтобы этот второй кластер имел доступ к серверу nfs и не открывал его для мира, например.