您好kubernetes专家
我有一个运行在4个树莓派上的kubernetes集群,使用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/)告诉我们它可以正常工作所以这个问题应该解决。
预先感谢 亨氏
答案 0 :(得分:1)
我找到了一个配置,基于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到支持入口控制器的服务时,我的示例才起作用。
我还检查了是否仅将“ hostNetwork:true”添加到DeamonSet的spec.template.spec或将“ type:ClusterIP”添加到服务的规范是否有效,但仅当我同时添加两者时,它才有效。