Kubernetes NFS服务器Pod挂载可用于Pod ip,但不适用于Kubernetes服务

时间:2018-08-15 11:02:37

标签: kubernetes nfs

我在Pod中创建了一个nfs服务器,以将其用作卷。当创建具有某个卷的另一个Pod时,该卷挂载确实可以与nfs pod的ip一起使用。由于不能保证此ip保持不变,因此我为nfs pod添加了服务,并添加了固定的群集ip。使用卷安装启动容器时,它始终会失败,并显示以下错误:

  

无法为容器“ nginx_default(35ecd8ec-a077-11e8-b7bc-0cc47a9aec96)”安装卷:超时已到期,等待卷挂接或为容器“ default” /“ nginx”安装。未安装的卷列表= [nfs-demo]。未连接卷的列表= [nfs-demo nginx-test-account-token-2dpgg]

    apiVersion: v1
    kind: Pod
    metadata:
      name: nfs-server
      labels:
        name: nfs-server
    spec:
      containers:
      - name: nfs-server
        image: my-nfs-server:v1
        args: ["/exports"]
        securityContext:
          privileged: true
    ---
    kind: Service
    apiVersion: v1
    metadata:
      name: nfs-service
    spec:
      selector:
        name: nfs-server
      clusterIP: "10.96.0.3"
      ports:
        - name: nfs
          port: 2049
          protocol: UDP
        - name: mountd
          port: 20048
          protocol: UDP   
        - name: rpcbind
          port: 111
          protocol: UDP
        - name: nfs-tcp
          port: 2049
          protocol: TCP
        - name: mountd-tcp
          port: 20048
          protocol: TCP
        - name: rpcbind-tcp
          port: 111
          protocol: TCP

我的吊舱试图挂载服务器:

    apiVersion: v1
    kind: Pod
    metadata:
      name: nginx
      labels:
        name: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        volumeMounts:
        - mountPath: "/exports"
          name: nfs-demo
        securityContext:
          privileged: true
      securityContext:
        supplementalGroups: [100003]
      serviceAccountName: nginx-test-account
      volumes:
      - name: nfs-demo
        nfs:
          server: 10.96.0.3
          path: "/exports"
          readOnly: false

我以此作为我的nfs服务器映像的基础:

https://github.com/cpuguy83/docker-nfs-server

https://medium.com/@aronasorman/creating-an-nfs-server-within-kubernetes-e6d4d542bbb9

有人知道为什么Mount ist与pod ip一起工作而不与service ip一起工作吗?

4 个答案:

答案 0 :(得分:2)

我找到了解决此问题的新方法,可以将nfs-server端口设置为固定,然后通过服务安装nfs-server。您可以参考https://wiki.debian.org/SecuringNFS

enter image description here enter image description here

答案 1 :(得分:0)

尝试删除ClusterIP ip地址(让kube为nfs服务分配一个IP),并在卷安装定义中使用名称“ nfs-service”。确保nginx pod和nfs服务在同一名称空间上。

答案 2 :(得分:0)

Bal Chua所述,您可能 没有在nfs-server pod定义中导出nfs端口。

nfs-server-pod.yaml

select * from user_sys_privs;

nfs-server-service.yaml

apiVersion: v1beta1
kind: Pod
id: nfs-server
desiredState:
  manifest:
    version: v1beta1
    id: nfs-server
    containers:
      - name: nfs-server
        image: jsafrane/nfs-data
        privileged: true
        ports:
          - name: nfs
            containerPort: 2049
            protocol: tcp
labels:
  name: nfs-server

来自example of NFS volume页。

答案 3 :(得分:0)

我找到了解决问题的方法:

我的服务中缺少端口,而不是Pod。为了找到我需要的端口,我打开了一个控制台到pod(kubectl exec),并使用“ rpcinfo -p ”命令列出了服务所需的端口。

它确实解决了连接问题,但只是暂时的。这些端口不是静态的,因此它并不比使用端口IP本身更好。 我确实认为可以配置静态端口。

如果有类似问题的人需要进一步阅读:

http://tldp.org/HOWTO/NFS-HOWTO/security.html

https://wiki.debian.org/SecuringNFS

我遇到的第二个问题:仅当nfs-server pod和安装它的pod位于同一节点上时,安装才有效。我可以在更新到kubernetes 1.11版时修复它。

自从我原来的问题解决了以后,我还是认为我的问题已经回答了。