您好,登錄后才能下訂單哦!
1.背景;
? ? ? ? 由于簡化部署k8s 集群 ,公司的k8s 部署方案使用的是 kubeadm ,且跟進線上線下維度進行集群劃分,為何要使用kubeadm 主要有兩個原因:1.部署方便快捷,2.k8s節點擴容方便? 3.部署難度降低;?
2.系統環境;
系統版本 | 內核版本 | etcd? | 備注 |
CentOS Linux release 7.5.1804 | 3.10.0-862.14.4.el7.x86_64 | etcdctl version: 3.3.11 | |
3.相關組件版本;
kubeadmin 組件名稱 | 組件版本名稱 | 備注 |
k8s.gcr.io/kube-apiserver? | v1.13.4 | kube-apiserver 是 Kubernetes 最重要的核心組件之一,主要提供以下的功能
|
k8s.gcr.io/kube-controller-manager? | v1.13.4 | kube-scheduler 負責分配調度 Pod 到集群內的節點上,它監聽 kube-apiserver,查詢還未分配 Node 的 Pod,然后根據調度策略為這些 Pod 分配節點(更新 Pod 的? 調度器需要充分考慮諸多的因素:
|
k8s.gcr.io/kube-scheduler | v1.13.4 | Controller Manager 由 kube-controller-manager 和 cloud-controller-manager 組成,是 Kubernetes 的大腦,它通過 apiserver 監控整個集群的狀態,并確保集群處于預期的工作狀態。 |
?k8s.gcr.io/kube-proxy | v1.13.4 | 每臺機器上都運行一個 kube-proxy 服務,它監聽 API server 中 service 和 endpoint 的變化情況,并通過 iptables 等來為服務配置負載均衡(僅支持 TCP 和 UDP)。 kube-proxy 可以直接運行在物理機上,也可以以 static pod 或者 daemonset 的方式運行。 |
k8s.gcr.io/pause | 3.1 | Kubernetes為每個Pod都附屬了gcr.io/google_containers/pause:latest,這個容器只接管Pod的網絡信息,業務容器通過加入網絡容器的網絡來實現網絡共享。此容器隨著pod創建而創建,隨著Pod刪除而刪除,正如其名字“pause” 該容器是對業務pod的命名空間的解析。 |
k8s.gcr.io/coredns | 1.2.6 | DNS 是 Kubernetes 的核心功能之一,通過 kube-dns 或 CoreDNS 作為集群的必備擴展來提供命名服務。 |
weaveworks/weave | 2.5.2 | Weave Net是一個多主機容器網絡方案,支持去中心化的控制平面,各個host上的wRouter間通過建立Full Mesh的TCP鏈接,并通過Gossip來同步控制信息。這種方式省去了集中式的K/V Store,能夠在一定程度上減低部署的復雜性, |
4.應用實踐;
(1).集群已經正常運行如下所示;
2.查看deployment 配置;
apiVersion:?extensions/v1beta1? kind:?Deployment? metadata:? ??name:?nginx-dp spec:? ??selector: ????matchLabels: ??????app:?nginx-dp ??replicas:?1 ??template:? ????metadata:? ??????labels:? ????????app:?nginx-dp? ????spec:? ??????containers:? ????????-?name:?nginx? ??????????image:?nginx:alpine? ??????????ports:? ????????????-?containerPort:?80
3.查看ervice 配置;
apiVersion:?v1 kind:?Service metadata: ??name:?nginx-dp-cpf spec: ??type:?NodePort ??ports: ??-?nodePort:?30001 ????port:?80 ????targetPort:?80 ????protocol:?TCP ??selector: ????app:?nginx-dp
4.查看生成endpoints?
5.查看service 規則;
6.查看由kube-proxy 生成的iptables 防火墻規則; (正常規則)
注意:
? ? ? 1.如果防火墻規則出現 類似如下規則:
? ? ? ? -A KUBE-EXTERNAL-SERVICES -p tcp -m comment --comment "default/nginx-dp-cpf: has no endpoints" -m addrtype --dst-type LOCAL -m tcp --dport 30001 -j REJECT --reject-with icmp-port-unreachable
? ? ? 2.解決辦法;
? ? ? ? ?? (1).net.ipv4.ip_forward?= 1? #系統內核路由轉發功能
? ? ? ? ? ?(2).iptables -P FORWARD ACCEPT? #允許 iptables??FORWARD 鏈規則通過;
? ? ? ? ? ?(3).iptables -P?OUTPUT ACCEPT? #允許 iptables??OUTPUT?鏈規則通過;
? ? ? ? ? ?(4).檢查deployment?labels? 和 service?labels?設置是否關聯正確;
? ? ? ? ? ?(5).kubectl get endpoints? --show-labels? #注意此規則和防火墻規則匹配 若出現none 請檢查防火墻規則;
7.進行功能測試 (k8s 集群內進行測試);
8.ingress 部署;
#master?端執行; kubectl?apply?-f?https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/mandatory.yaml kubectl?apply?-f?https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/provider/baremetal/service-nodeport.yaml
注意:?
? ? ? nodeSelector 字段 labels? 和 node labels 關聯; 否則運行ingres pod 出現 peding 狀態;
8.ingress 配置;
##配置yaml apiVersion:?extensions/v1beta1 kind:?Ingress metadata: ??name:?test-ingress spec: ??rules: ??-?http: ??????paths: ??????-?path:?/ ????????backend: ??????????serviceName:?test-nginx? ??????????servicePort:?80
###查看創建?ingress;
####測試訪問###
####基于域名多服務的 Ingress
路由到多服務的 Ingress 即根據請求路徑的不同轉發到不同的后端服務上,比如
www.breaklinux.com?->?10.109.21.77->?/test1?????s1:80 ??????????????????????????????????—>?/test2??????s2:80
apiVersion:?extensions/v1beta1 kind:?Ingress metadata: ??name:?test spec: ??rules: ??-?host:?www.breaklinux.com ????http: ??????paths: ??????-?path:?/test1 ????????backend: ??????????serviceName:?test-nginx ??????????servicePort:?80 ??????-?path:?/test2 ????????backend: ??????????serviceName:?nginx-dp-test-01? ??????????servicePort:?80
###虛擬主機 Ingress
apiVersion:?extensions/v1beta1 kind:?Ingress metadata: ??annotations: ????nginx.ingress.kubernetes.io/configuration-snippet:?"" ????nginx.ingress.kubernetes.io/proxy-body-size:?10240m ????nginx.ingress.kubernetes.io/proxy-read-timeout:?"36000" ????nginx.ingress.kubernetes.io/proxy-send-timeout:?"36000" ????nginx.ingress.kubernetes.io/rewrite-target:?/$1 ????nginx.ingress.kubernetes.io/ssl-redirect:?"false" ??name:?test-nginx-ingess spec: ??rules: ??-?host:?test-nginx-ingress.dev.k8s.chj.cloud ????http: ??????paths: ??????-?backend: ??????????serviceName:?test-nginx ??????????servicePort:?80? ????????path:?/?(.*)
? ##基于虛擬主機訪問測試#
##因為沒有dns 服務環境 綁定hosts 進行測試
cat?/etc/hosts 10.109.21.77???www.breaklinux.com?test-nginx-ingress.dev.k8s.chj.cloud
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。