当前位置: 首页 > 知识库问答 >
问题:

在raspberrypi kubernetes集群上将入口部署为监听端口80的演示集需要什么

夏俊杰
2023-03-14

你好kubernetes专家,

我有一个kubernetes集群,它运行在4个raspberry PI上,docker 18.04ce和kubernetes 1.9.7。

我部署了一个服务,可以通过集群IP从集群内访问此服务。我还部署了一个入口,如https://docs.traefik.io/user-guide/kubernetes/和如何让库伯内特斯IngresPort 80在裸机单节点集群上工作,作为基于入口控制器服务的DaemonSet中所述。DaemonSet还有NET_BIND_SERVICE集,它应该实现主机在与服务相同的端口上侦听。

一切正常,但我的入口不监听主机端口80。不知何故,设置NET\u BIND\u服务无法按预期工作。有人知道如何解决这个问题吗?

如果我将入口控制器部署为带有节点端口的部署,而不是守护程序,那么它可以工作,但这将我限制在端口kubernetes,允许为节点端口分配。

https://hackernoon.com/kubernetes-ingress-controllers-and-traefik-a32648a4ae95说明入口守护程序的主机端口不适用于CNI网络插件(我使用flannel和weave进行了测试),但Kubernetes@RaspberryPI站点(如https://blog.hypriot.com/post/setup-kubernetes-raspberry-pi-cluster/)告诉我它是有效的,所以这个问题应该得到解决。

提前谢谢Heinz

共有1个答案

窦英武
2023-03-14

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

使用中的守护程序集定义https://docs.traefik.io/user-guide/kubernetes/尤其是yaml文件https://raw.githubusercontent.com/containous/traefik/master/examples/k8s/traefik-ds.yaml

但您必须将hostNetwork:true添加到守护程序的规范中,并将type:ClusterIP添加到服务的规范中。

我的工作职责如下:

---
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时才起作用。

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

 类似资料:
  • 问题内容: 我在运行RHEL7的Amazo EC2实例上运行elasticsearch 1.4和kibana4。 Kibana4作为独立进程运行,未部署在诸如nginx之类的Web容器中,它正在侦听端口5601(默认端口)。我想让kibana在80端口监听。 是否可以不使用nginx来实现?如果是,怎么办? 问题答案: 编辑文件{kibana-directory} /config/kibana.y

  • 本文向大家介绍如何用Node监听80端口?相关面试题,主要包含被问及如何用Node监听80端口?时的应答技巧和注意事项,需要的朋友参考一下 这题有陷阱!在类Unix系统中你不应该去监听80端口,因为这需要超级用户权限。因此不推荐让你的应用直接监听这个端口。 目前,如果你一定要让你的应用80端口的话,你可以有通过在Node应用的前方再添加一层反向代理(例如nginx)来实现,如下图。否则,建议你直接

  • 我可以从外部通过域名导航到我的集群,并看到具有有效HTTPS的控制面板(在15672内部)。所以入口已经启动并运行,我可以创建队列等等。因此rabbitmq工作正常。 但是,我无法使TCP部分工作,以便从集群外部发布到队列。 我已经通过azure portal接口为控制器(nginx-ingress-ingress-nginx-controller)编辑了我认为是configmap(azure-c

  • 我有一个用kubeadm创建的裸机kubernetes(

  • 问题内容: 我创建并启动一个这样的应用程序: 并且可以正常工作(在端口3000上)。但是,当我将端口更改为80时,运行输出如下: 这在我的笔记本电脑上也有效,但在端口80打开的Amazon EC2实例上无效。可以找出问题所在。有小费吗? 问题答案: 您是否以root用户身份启动应用程序?因为较低的端口号需要root特权。也许sudo节点app.js可以工作吗? 但是,您不应使用root用户特权在端

  • 本文档最初是基于kubenetes1.6版本编写的,对于kuberentes1.8及以上版本同样适用,只是个别位置有稍许变动,变动的地方我将特别注明版本要求。 本系列文档介绍使用二进制部署 kubernetes 集群的所有步骤,而不是使用 kubeadm 等自动化方式来部署集群,同时开启了集群的TLS安全认证,该安装步骤适用于所有bare metal环境、on-premise环境和公有云环境。 如