首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >要使入口部署为demonset监听raspberrypi集群上的端口80,需要做什么

要使入口部署为demonset监听raspberrypi集群上的端口80,需要做什么
EN

Stack Overflow用户
提问于 2018-08-29 05:19:06
回答 1查看 678关注 0票数 1

你好,kubernetes专家,

我有一个kubernetes集群,运行在4个raspberry pis上,docker为18.04ce,kubernetes为1.9.7。

我部署了一个服务,这个服务可以通过集群IP从集群内部访问。我还部署了一个入口,如https://docs.traefik.io/user-guide/kubernetes/How to get Kubernetes Ingress Port 80 working on baremetal single node cluster中所述,作为基于入口控制器服务的DaemonSet。DaemonSet还设置了NET_BIND_SERVICE,它应该实现主机在与服务相同的端口上侦听。

一切都像描述的那样工作,但是我的入口没有在主机端口80上侦听。不知何故,设置NET_BIND_SERVICE不能按预期工作。有谁知道怎么解决这个问题吗?

如果我使用NodePort而不是DaemonSet将入口控制器部署为部署,它可以工作,但这限制了我只能使用kubernetes允许为NodePorts分配的端口。

https://hackernoon.com/kubernetes-ingress-controllers-and-traefik-a32648a4ae95告诉我们,入口DaemonSet的hostPort不能与CNI网络插件一起工作(我用flannel和weave测试过),但是Kubernetes@RaspberryPI站点(比如https://blog.hypriot.com/post/setup-kubernetes-raspberry-pi-cluster/)说它可以工作,所以这个问题应该解决。

提前感谢亨氏

EN

回答 1

Stack Overflow用户

发布于 2018-08-29 06:29:27

我发现了基于traefik的入口如何在我的Raspberry Pi集群上使用docker 18.04CE,kubernetes 1.9.7和2018-06-27-raspbian-stretch-lite.img工作的配置:

使用来自https://docs.traefik.io/user-guide/kubernetes/的DaemonSet定义,特别是yaml文件https://raw.githubusercontent.com/containous/traefik/master/examples/k8s/traefik-ds.yaml

但是您必须将hostNetwork: true添加到DaemonSet的规范中,并将类型: ClusterIP添加到服务的规范中。

我的yaml工作方式如下:

代码语言:javascript
复制
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: traefik-ingress-controller
  namespace: kube-system
---
kind: DaemonSet
apiVersion: extensions/v1beta1
metadata:
  name: traefik-ingress-controller
  namespace: kube-system
  labels:
    k8s-app: traefik-ingress-lb
spec:
  template:
    metadata:
      labels:
        k8s-app: traefik-ingress-lb
        name: traefik-ingress-lb
    spec:
      serviceAccountName: traefik-ingress-controller
      terminationGracePeriodSeconds: 60
      hostNetwork: true
      containers:
      - image: traefik
        name: traefik-ingress-lb
        ports:
        - name: http
          containerPort: 80
          hostPort: 80
        - name: admin
          containerPort: 8080
          hostPort: 8080
        securityContext:
          capabilities:
            drop:
            - ALL
            add:
            - NET_BIND_SERVICE
        args:
        - --api
        - --kubernetes
        - --logLevel=DEBUG
---
kind: Service
apiVersion: v1
metadata:
  name: traefik-ingress-service
  namespace: kube-system
spec:
  type: ClusterIP
  selector:
    k8s-app: traefik-ingress-lb
  ports:
    - protocol: TCP
      port: 80
      name: web
    - protocol: TCP
      port: 8080
      name: admin

根据kubernetes文档,ClusterIP是服务类型的默认值。但我的示例只有在显式地将type: ClusterIP添加到支持入口控制器的服务中时才有效。

我还检查了如果只将"hostNetwork: true“添加到类型的spec.template.spec或将”DeamonSet : ClusterIP“添加到服务的规范中,它是否有效,但只有同时添加两者才有效。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52066340

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档