目前经常使用的k8s经常使用服务暴露方式有 LoadBalancer、NodePort、Ingress 三种;node
安装方式有两种 Deployment 和 DaemonSet,官网比较有详细的解释,我就直接贴上了了:nginx
NET_BIND_SERVICE
capability, which will allow it to bind to port 80/443/etc on each host. This will allow bypassing the kube-proxy, and reduce traffic hops. Note that this is against the Kubernetes Best Practices Guidelines, and raises the potential for scheduling/scaling issues. Despite potential issues, this remains the choice for most ingress controllers.这里咱们听官方的,先用 DaemonSet 吧,主要考虑两个缘由:git
kubectl apply -f https://raw.githubusercontent.com/containous/traefik/v1.7/examples/k8s/traefik-rbac.yaml
这里能够把这个文件下载下来,咱们要略做修改github
wget https://raw.githubusercontent.com/containous/traefik/v1.7/examples/k8s/traefik-ds.yaml
# 先添加一个https 的 containerPort - name: https containerPort: 443 hostPort: 443 # 添加args - --defaultentrypoints=http,https - --entrypoints=Name:https Address::443 TLS - --entrypoints=Name:http Address::80
kubectl create -f traefik-ds.yaml
kubectl get pod -n kube-system
官方镜像是在 dockerhub 的,若是 pull 不下来就去阿里云找一个,将上面的yaml文件下载下来,替换一下image地址docker
这里官方例子是使用 traefik-ui.minikube 这个域名,这里有须要的话能够自行修改域名,好比我这里改为了 k8s.mytest.com后端
wget https://raw.githubusercontent.com/containous/traefik/v1.7/examples/k8s/ui.yaml
建立ingress,而后在咱们本地绑定一下/etc/hostsbash
kubectl create -f ui.yaml # 添加 hosts (若是是生产环境,直接添加域名的DNS解析就行) sudo echo "192.168.199.204 k8s.mytest.com" >> /etc/hosts
访问本身绑定的域名,这里已经能看到ui了app
建立包含用户名密码的认证文件,建立完检查一下,文件内容应该是 用户名:密码(md5)负载均衡
htpasswd -c ./auth admin
建立 secretless
kubectl create secret generic traefik-secret --from-file auth --namespace=kube-system
修改 Traefik Web UI 的 ingress,这里继续修改前面下面的ui.yaml,添加:
annotations: kubernetes.io/ingress.class: traefik traefik.ingress.kubernetes.io/auth-type: basic traefik.ingress.kubernetes.io/auth-secret: traefik-secret
更新 ingress
kubectl apply -f ui.yaml
从新访问 Traefik Web UI,使用刚才建立的用户名密码登陆便可
简单的安装和使用就写到这里,上面暴露 Traefik Web UI 其实就是一个暴露服务的例子,Traefik还有不少更高级的配置,好比使用 acme 自动申请和管理 let's encrypt 证书,你们能够从官网了解一下。
kubectl create secret tls mytest-secret --cert=mytest.crt --key=mytest.key -n kube-system
tls: - secretName: mytest
参考:官方文档