首页 文章

有必要将一个入口部署为在一个raspberrypi kubernetes集群上侦听端口80的恶魔集

提问于
浏览
0

你好kubernetes专家,

我有一个kubernetes集群在4个覆盆子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网络插件(我用法兰绒和编织测试),但Kubernetes @ RaspberryPI网站(如https://blog.hypriot.com/post/setup-kubernetes-raspberry-pi-cluster/)告诉它可行,所以这个问题应该解决 .

在此先感谢亨氏

1 回答

  • 1

    我找到了一个配置,基于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如下:

    ---
    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是服务类型的默认值 . 但是我的样本只有在我明确地将类型:ClusterIP添加到支持入口控制器的服务时才有效 .

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

相关问题