這是容器云平臺第四篇,接上一篇繼續(xù)鬼贱,
首先kubernetes服務(wù)暴露有如下幾種方式:
- NodePort
- Loadbalance
- ClusterIP
- Ingress
本文緊貼第一篇架構(gòu)圖,只介紹Ingress,其余的后續(xù)再詳細說香璃。这难。
Ingress是什么?
Ingress 是對集群中服務(wù)的外部訪問進行管理的 API 對象葡秒,典型的訪問方式是 HTTP姻乓,當然TCP也是可以管理滴。
Ingress 可以提供負載均衡眯牧、SSL 終結(jié)和基于域名的虛擬托管蹋岩。
大白話就是:把kubernetes集群生部署的服務(wù)暴露出來,讓集群外部的用戶或者服務(wù)能訪問到学少。
能為kubernetes提供ingress的控制器很多剪个,本文就用基于HAProxy的控制器:Haproxy Ingreess。
HAProxy是一個快速可靠的TCP和HTTP反向代理和負載均衡器版确。
當然扣囊,一個kubernetes集群也可以同時部署多種ingress控制器。
HAProxy Ingress
HAProxy Ingress 通過監(jiān)控Kubernetes API,獲取services后端的pod狀態(tài)绒疗,動態(tài)更新haproxy的配置文件侵歇,以實現(xiàn)負載均衡。
它允許每個代理每秒有數(shù)千個請求吓蘑,不管集群的大小惕虑,具有非常低的延遲。
簡單做個介紹,接下來開始實戰(zhàn)枷遂。
部署HAProxy Ingress到kubernetes集群
- 下載yaml部署文件:
wget https://haproxy-ingress.github.io/resources/haproxy-ingress.yaml
- 修改haproxy-ingress.yaml樱衷,因為現(xiàn)在使用的是1.19版本,有的api版本已經(jīng)過期酒唉,需要修改下
rbac.authorization.k8s.io/v1beta1
改為rbac.authorization.k8s.io/v1
矩桂,如果不修改會有Warning,但是目前不影響 - 部署:
kubectl apply -f haproxy-ingress.yaml
[root@k8s-master001 opt]# kubectl apply -f haproxy-ingress.yaml namespace/ingress-controller created serviceaccount/ingress-controller created Warning: rbac.authorization.k8s.io/v1beta1 ClusterRole is deprecated in v1.17+, unavailable in v1.22+; use rbac.authorization.k8s.io/v1 ClusterRole clusterrole.rbac.authorization.k8s.io/ingress-controller created Warning: rbac.authorization.k8s.io/v1beta1 Role is deprecated in v1.17+, unavailable in v1.22+; use rbac.authorization.k8s.io/v1 Role role.rbac.authorization.k8s.io/ingress-controller created Warning: rbac.authorization.k8s.io/v1beta1 ClusterRoleBinding is deprecated in v1.17+, unavailable in v1.22+; use rbac.authorization.k8s.io/v1 ClusterRoleBinding clusterrolebinding.rbac.authorization.k8s.io/ingress-controller created Warning: rbac.authorization.k8s.io/v1beta1 RoleBinding is deprecated in v1.17+, unavailable in v1.22+; use rbac.authorization.k8s.io/v1 RoleBinding rolebinding.rbac.authorization.k8s.io/ingress-controller created configmap/haproxy-ingress created daemonset.apps/haproxy-ingress created
- 查看部署狀態(tài)
[root@k8s-master001 opt]# kubectl get all -n ingress-controller NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE daemonset.apps/haproxy-ingress 0 0 0 0 0 role=ingress-controller 6m2s
什么鬼痪伦,為什么沒有haproxy相關(guān)的pod呢侄榴?
- 現(xiàn)在再來看下 haproxy-ingress.yaml 這個文件,發(fā)現(xiàn)其中定義了nodeSelector節(jié)點標簽選擇器网沾,但是現(xiàn)在集群節(jié)點沒有任何機器有這個標簽癞蚕,因此需要給node設(shè)置合理的標簽,要不然不會創(chuàng)建pod
現(xiàn)在手動給master003添加一個標簽role=ingress-controller
[root@k8s-master001 opt]# kubectl label node k8s-master003 role=ingress-controller node/k8s-master003 labeled
- 再來查看下辉哥,已經(jīng)有haproxy-ingress-6mfqr桦山,狀態(tài)為Running,表示已經(jīng)部署好了醋旦,是不是so easy~~~
[root@k8s-master001 opt]# kubectl get all -n ingress-controlle NAME READY STATUS RESTARTS AGE pod/haproxy-ingress-6mfqr 1/1 Running 1 2m40s NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE daemonset.apps/haproxy-ingress 1 1 1 1 1 role=ingress-controller 18m
使用Ingress暴露服務(wù)
這里使用上一篇部署的nginx作為示例恒水,部署上篇,現(xiàn)在查看下nginx狀態(tài)
[root@k8s-master001 ~]# kubectl get po,svc
NAME READY STATUS RESTARTS AGE
pod/nginx-0 1/1 Running 0 32h
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 2d2h
service/nginx NodePort 10.106.27.213 <none> 80:30774/TCP 32h
可以看到有一個名為nginx的service
[root@k8s-master001 ~]# cat ingress.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: nginx
annotations:
kubernetes.io/ingress.class: haproxy
spec:
rules:
- host: nginx.ieasou.cn
http:
paths:
- path: /
backend:
serviceName: nginx
servicePort: 80
執(zhí)行部署饲齐,會有個Warning钉凌,因為kubernetes apiVersion更新,以后會不在支持extensions/v1beta1捂人,這里不影響御雕,先忽略。
[root@k8s-master001 ~]# kubectl apply -f ingress.yaml
Warning: extensions/v1beta1 Ingress is deprecated in v1.14+, unavailable in v1.22+; use networking.k8s.io/v1 Ingress
ingress.extensions/nginx configured
查看部署結(jié)果
[root@k8s-master001 ~]# kubectl get ing
NAME CLASS HOSTS ADDRESS PORTS AGE
nginx <none> nginx.test.cn 80 21m
現(xiàn)在滥搭,需要自己把nginx.test.cn解析到haproxy-ingresss所在節(jié)點的IP酸纲,本文haproxy-ingresss部署到了master003(10.26.25.22)
測試的話,直接修改/etc/hosts文件论熙,然后可以訪問nginx.test.cn
[root@k8s-master001 ~]# curl -I nginx.text.cn
HTTP/1.1 200 OK
server: nginx/1.19.2
date: Sat, 12 Sep 2020 12:40:01 GMT
content-type: text/html
content-length: 612
last-modified: Tue, 11 Aug 2020 14:50:35 GMT
etag: "5f32b03b-264"
accept-ranges: bytes
strict-transport-security: max-age=15768000
從結(jié)果可以看到福青,返回狀態(tài)碼摄狱,說明可以訪問到部署的nginx服務(wù)了脓诡。
注:文中圖片來源于網(wǎng)絡(luò),如有侵權(quán)媒役,請聯(lián)系我及時刪除祝谚。