IPFS在Kubernetes部署的服務開放

IPFS在Kubernetes部署的服務開放

首先,經過Helm在Kubernetes集羣上安裝IPFS 。下一步須要將其管理服務端口8080和http代理服務端口5001開放出來,集羣外面的應用(如瀏覽器)能夠訪問。node

一、端口映射

將Service映射爲宿主機端口,以下。git

kubectl port-forward ipfs-ipfs-0 8080:8080 5001:5001 --namespace=ipfs &

其中,ipfs-ipfs-0爲個人默認的ipfs pod的ID。若是你的不同,能夠經過 kubectl get pod -n ipfs 來獲取,其中-n ipfs我安裝的kubernetes集羣中的ipfs服務的命名空間。github

在瀏覽器地址欄輸入http://localhost:5001/webui 就能夠查看服務的狀態。web

二、內置方法(NodePort、Ingress和LoadBalancer)

可是,這種方法須要每次運行一個外部命令,比較麻煩。嘗試經過NodePort、Ingress和LoadBalancer都出現打開網頁後proxy代理鏈接不上的狀況。關於這幾種方法公開服務的部署,參見:docker

三、端口轉發服務

儘管 Kubernetes 提供了將服務映射爲節點上的端口的能力(使用NodePort),但這些端口只能在30000~32768範圍內分配。所以你不能將80端口直接映射到節點的宿主機,但這對於有的應用來講(指定端口)確是必須的。 這個狀況在未來會修改,這裏暫時提供了一個方法,能夠填平這個坑。api

3.1 獲取鏡像

容器鏡像 k8s.gcr.io/proxy-to-service:v2 是一個很小的Pod,能夠完成轉發服務端口到宿主機的操做。可使用任何端口,只要該端口對於服務和宿主機都是可用的就行。瀏覽器

  • 從國內主機上拉取容器鏡像,而後更名:
MY_REGISTRY=registry.cn-hangzhou.aliyuncs.com/openthings
docker pull ${MY_REGISTRY}/k8s-gcr-io-proxy-to-service:v2
docker tag ${MY_REGISTRY}/k8s-gcr-io-proxy-to-service:v2 k8s.gcr.io/proxy-to-service:v2

3.2 Pod安裝文件

例如,假設轉發node's port 53 (DNS) 到集羣的 DNS service. Pod的安裝配置文件以下:session

apiVersion: v1
kind: Pod
metadata:
  name: dns-proxy
spec:
  containers:
  - name: proxy-udp
    image: k8s.gcr.io/proxy-to-service:v2
    args: [ "udp", "53", "kube-dns.default", "1" ]
    ports:
    - name: udp
      protocol: UDP
      containerPort: 53
      hostPort: 53
  - name: proxy-tcp
    image: k8s.gcr.io/proxy-to-service:v2
    args: [ "tcp", "53", "kube-dns.default" ]
    ports:
    - name: tcp
      protocol: TCP
      containerPort: 53
      hostPort: 53

這將建立一個pod,包含兩個containers (one for TCP, one for UDP)。每一個容器接收 port (53 here) 而後轉發流量到 kube-dns service。運行在多少個節點都行,若是你願意。app

注意 UDP container 有第四個參數 - 超時. 與 TCP 不一樣,UDP 並不真正具備 "connection terminated"。若是須要proxy UDP, 你須要選擇 合適的timeout. 你也能夠指定TCP sessions的超時,超過期間後將會自動關閉鏈接。在這裏,DNS sessions 不會真正地重用,一個短的timeout就能夠了。tcp

3.3 IPFS代理安裝文件

咱們修改上面的參數,用來代理IPFS的服務。以下:

apiVersion: v1
kind: Pod
metadata:
  name: ipfs-portforward
  namespace: ipfs
spec:
  containers:
  - name: proxy-ipfs-ui
    image: k8s.gcr.io/proxy-to-service:v2
    args: [ "tcp", "5001", "ipfs-ipfs.ipfs" ]
    ports:
    - name: tcp
      protocol: TCP
      containerPort: 5001
      hostPort: 5001
  - name: proxy-ipfs
    image: k8s.gcr.io/proxy-to-service:v2
    args: [ "tcp", "8080", "ipfs-ipfs.ipfs" ]
    ports:
    - name: tcp
      protocol: TCP
      containerPort: 8080
      hostPort: 8080

保存爲portforward.yaml文件,而後運行:

kubectl apply -f portforward.yaml
  • 建議:
    • 提早拉取鏡像,如前3.1所示的方法。
    • 安裝到與IPFS同一個命名空間。

3.4 訪問IPFS服務

再去打開 http://localhost:5001/webui。正常狀況下,這與在本機安裝的IPFS幾乎是同樣的。

若是經過命令行訪問,能夠執行:

kubectl exec -n ipfs ipfs-ipfs-0 /bin/sh

#而後,輸入:
ipfs

#應該能夠看到IPFS的幫助提示。

四、參考

相關文章
相關標籤/搜索