gpt4 book ai didi

kubernetes - 使入口部署为监听树莓派kubernetes集群上的端口80的必要条件

转载 作者:行者123 更新时间:2023-12-02 12:20:00 29 4
gpt4 key购买 nike

您好kubernetes专家,

我有一个在docker 18.04ce和kubernetes 1.9.7的4个树莓pi上运行的kubernetes集群。

我部署了一项服务,可以通过群集IP从群集内部访问此服务。
我还按照https://docs.traefik.io/user-guide/kubernetes/How to get Kubernetes Ingress Port 80 working on baremetal single node cluster中的DaemonSet部署了一个基于入口 Controller 服务的入口。 DaemonSet还具有NET_BIND_SERVICE设置,该设置应确保主机正在侦听与服务相同的端口。

一切都像描述的那样工作,但是我的入口未在主机端口80上监听。以某种方式设置NET_BIND_SERVICE无法按预期工作。
有谁知道该如何解决?

如果我将入口 Controller 作为具有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/)告诉它可以工作,因此应该解决此问题。

提前致谢
亨氏

最佳答案

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

使用https://docs.traefik.io/user-guide/kubernetes/中的DaemonSet定义,尤其是使用Yaml文件https://raw.githubusercontent.com/containous/traefik/master/examples/k8s/traefik-ds.yaml


你必须添加
hostNetwork:符合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到支持入口 Controller 的服务时,我的示例才起作用。

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

关于kubernetes - 使入口部署为监听树莓派kubernetes集群上的端口80的必要条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52066340/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com