目前經常使用的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
參考:官方文檔