IPFS在Kubernetes部署的服务开放

偶尔善良 提交于 2019-12-04 08:53:46

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代理连接不上的情况。关于这几种方法公开服务的部署,参见:

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、参考

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!