IPFS在Kubernetes部署的服务开放
首先,通过Helm在Kubernetes集群上安装IPFS 。下一步需要将其管理服务端口8080和http代理服务端口5001开放出来,集群外面的应用(如浏览器)可以访问。
1、端口映射
将Service映射为宿主机端口,如下。
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服务的命名空间。
在浏览器地址栏输入http://localhost:5001/webui 就可以查看服务的状态。
2、内置方法(NodePort、Ingress和LoadBalancer)
但是,这种方法需要每次运行一个外部命令,比较麻烦。尝试通过NodePort、Ingress和LoadBalancer都出现打开网页后proxy代理连接不上的情况。关于这几种方法公开服务的部署,参见:
- Nodeport、Loadbalancer和Ingress,https://my.oschina.net/u/2306127/blog/1647202
- Nginx ingress安装,https://my.oschina.net/u/2306127/blog/1793287
- 服务的IP地址映射,为私有Kubernetes集群创建LoadBalancer服务
3、端口转发服务
尽管 Kubernetes 提供了将服务映射为节点上的端口的能力(使用NodePort),但这些端口只能在30000~32768范围内分配。因此你不能将80端口直接映射到节点的宿主机,但这对于有的应用来说(指定端口)确是必须的。 这个情况在将来会修改,这里暂时提供了一个方法,可以填平这个坑。
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的安装配置文件如下:
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。运行在多少个节点都行,如果你愿意。
注意 UDP container 有第四个参数 - 超时. 与 TCP 不同,UDP 并不真正具有 "connection terminated"。如果需要proxy UDP, 你需要选择 合适的timeout. 你也可以指定TCP sessions的超时,超过时间后将会自动关闭连接。在这里,DNS sessions 不会真正地重用,一个短的timeout就可以了。
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的帮助提示。
4、参考
- IPFS 命令大全
- https://my.oschina.net/u/2306127?q=ipfs
- 通过Helm在Kubernetes集群上安装IPFS
- 工具代码:https://github.com/openthings/kubernetes-tools
- Proxy项目:https://github.com/kubernetes/contrib/tree/master/for-demos/proxy-to-service
来源:oschina
链接:https://my.oschina.net/u/2306127/blog/1933999