你好,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/)说它可以工作,所以这个问题应该解决。
提前感谢亨氏
发布于 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工作方式如下:
---
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“添加到服务的规范中,它是否有效,但只有同时添加两者才有效。
https://stackoverflow.com/questions/52066340
复制相似问题