首先,經過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都出現打開網頁後proxy代理鏈接不上的狀況。關於這幾種方法公開服務的部署,參見:docker
儘管 Kubernetes 提供了將服務映射爲節點上的端口的能力(使用NodePort),但這些端口只能在30000~32768範圍內分配。所以你不能將80端口直接映射到節點的宿主機,但這對於有的應用來講(指定端口)確是必須的。 這個狀況在未來會修改,這裏暫時提供了一個方法,能夠填平這個坑。api
容器鏡像 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
例如,假設轉發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
咱們修改上面的參數,用來代理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
再去打開 http://localhost:5001/webui。正常狀況下,這與在本機安裝的IPFS幾乎是同樣的。
若是經過命令行訪問,能夠執行:
kubectl exec -n ipfs ipfs-ipfs-0 /bin/sh #而後,輸入: ipfs #應該能夠看到IPFS的幫助提示。