|NO.Z.00163|——————————|^^ 部署 ^^|——|KuberNetes&服務釋出.V14|-------------------------------------------------------|ingress.v02|ingress部署.V01|部署helm|
阿新 • • 發佈:2022-03-30
[CloudNative:KuberNetes&服務釋出.V14] [Applications.KuberNetes] [|DevOps|k8s|服務釋出|什麼是Ingress|使用helm安裝ingress|Ingress簡單使用|Ingress多級域名使用|]
一、Ingress安裝使用
二、安裝helm並新增ingress的helm倉庫### --- Ingress安裝使用 ~~~ # 首先安裝helm管理工具: ~~~ https://helm.sh/docs/intro/install/ ~~~ # 使用helm安裝ingress: ~~~ https://kubernetes.github.io/ingress-nginx/deploy/#using-helm
### --- 安裝helm的客戶端工具到k8s叢集中:https://helm.sh/docs/intro/install/ ~~~ 下載helm二進位制程式包: [root@k8s-master01 ~]# wget https://get.helm.sh/helm-v3.5.4-linux-amd64.tar.gz [root@k8s-master01 ~]# tar -zxvf helm-v3.5.4-linux-amd64.tar.gz [root@k8s-master01 ~]# mv linux-amd64/helm /usr/local/bin/helm [root@k8s-master01 ~]# helm version version.BuildInfo{Version:"v3.5.4", GitCommit:"1b5edb69df3d3a08df77c9902dc17af864ff05d1", GitTreeState:"clean", GoVersion:"go1.15.11"}
### --- 新增ingress的helm倉庫(課程講解的版本已經上傳至百度網盤)
[root@k8s-master01 ~]# helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
"ingress-nginx" has been added to your repositories
### --- 檢視已經有的helm的倉庫 [root@k8s-master01 ~]# helm repo list NAME URL ingress-nginx https://kubernetes.github.io/ingress-nginx
### --- 下載ingress的版本包
### --- 下載ingress的helm包至本地
~~~ 檢視當前helm下Ingress的版本,建議使用040.2以上的版本;因為0.35在k8s1.9是不太好用的。
[root@k8s-master01 ~]# helm search repo ingress-nginx
NAME CHART VERSION APP VERSION DESCRIPTION
ingress-nginx/ingress-nginx 3.29.0 0.45.0 Ingress controller for Kubernetes using NGINX a...
### --- 第一個ingress-nginx是倉庫的名稱,第二個ingress-nginx是helm的包名
[root@k8s-master01 ~]# helm pull ingress-nginx/ingress-nginx
### --- 更改對應的配置
[root@k8s-master01 ~]# tar -zxvf ingress-nginx-3.6.0.tgz
三、修改ingress版本包配置引數
### --- 需要修改的位置
[root@k8s-master01 ~]# cd ingress-nginx
### --- helm的配置檔案
[root@k8s-master01 ingress-nginx]# vim values.yaml
controller:
image:
repository: registry.cn-beijing.aliyuncs.com/dotbalo/controller # 定義為阿里雲的映象倉庫
tag: "v0.40.2"
#digest: sha256:46ba23c3fbaafd9e5bd01ea85b2f921d9f2217be082580edc22e6c704a83f02f //雜湊值給去掉
#******省略部分內容**********
hostNetwork: true # 部署ingress的方式推薦使用hostNetwork去部署,hostNetwork是直接使用宿主機的埠號,這樣它的效能可能會好一點。
#******省略部分內容**********
dnsPolicy: ClusterFirstWithHostNet # 若是使用hostNetwork的話dns策略是需要更改為ClusterFirstWithHostNet。不然k8s的pod是解析不了k8s內部的service,所以一定要設定成這個
#******省略部分內容**********
kind: DaemonSet # 使用DaemonSet去部署,使用deployment也是可以的,但是使用DaemonSet更受控制,我們可以固定到某個節點上面。這樣就可以直接在宿主機上暴露一個埠號,這樣k8s外部的叢集就可以直接代理到Ingress上面。若是使用Deployment的話,可能需要deploymentservice可能暴露一個notepad,這樣效能可能不是很好,推薦使用DaemonSet去部署,DaemonSet在去部署ingress的pod,暴露它的80和443埠,然後在外部的service代理到這個ingress所在的節點上的IP地址和埠號就可以。
nodeSelector:
kubernetes.io/os: linux
ingress: "true" # 我們不是所有節點上都不熟ingress,只有ingress為true這個標籤的部署,沒有就不用去部署了。
#******省略部分內容**********
resources: # 這個位置是沒有更改的,若是在生產環境下建議限制一下,若是專有節點的話,可以不用去限制。它可以佔用整個宿主機的資源。這個資源給的大一點,應為它是k8s的入口,佔用的資源還是比較多的。
# limits:
# cpu: 100m
# memory: 90Mi
requests:
cpu: 100m
memory: 90Mi
#******省略部分內容**********
type: ClusterIP # 這邊不使用LoadBalancer;LoadBalancer是在雲環境中會使用到,若是在我們的機房,就不適用LoadBalancer,因為我們是通過Clusetnetwork去部署的,我們直接通過宿主機IP+埠號就可以訪問到資源,所以不使用LoadBalancer;若是雲環境的話就需要配置。
#******省略部分內容**********
admissionWebhooks: # 是准入控制;若是你的版本過低的話,比如你的版本是0.35的,這個enabled是不能設定為true的,設定為true的話,部署ingress會報錯,報錯你的證書版本不正確,但是在0.40之後是不會報錯的。
annotations: {}
enabled: true
failurePolicy: Fail
# timeoutSeconds: 10
port: 8443
certificate: "/usr/local/certificates/cert"
key: "/usr/local/certificates/key"
namespaceSelector: {}
objectSelector: {}
#******省略部分內容**********
patch:
enabled: true
image:
repository: registry.cn-beijing.aliyuncs.com/dotbalo/kube-webhook-certgen
tag: v1.3.0
pullPolicy: IfNotPresent
### --- 註釋詳解
~~~ Controller和admissionWebhook的映象地址,
~~~ 需要將公網映象同步至公司內網映象倉庫(和課程不一致的版本,
~~~ 需要自行同步gcr映象的,可以百度查一下使用阿里雲同步gcr的映象,也可以參考這個連線
~~~ https://blog.csdn.net/weixin_39961559/article/details/80739352,
~~~ 或者參考這個連線:
~~~ https://blog.csdn.net/sinat_35543900/article/details/103290782)
~~~ hostNetwork設定為true
~~~ dnsPolicy設定為 ClusterFirstWithHostNet
~~~ NodeSelector新增ingress: "true"部署至指定節點
~~~ 型別更改為kind: DaemonSet
五、部署ingress
### --- 建立namespace
~~~ 部署ingress:給需要部署ingress的節點上打標籤;建議Ingress部署在我們建立的namespace上
[root@k8s-master01 ingress-nginx]# kubectl create ns ingress-nginx
namespace/ingress-nginx created
[root@k8s-master01 ingress-nginx]# kubectl get ns
ingress-nginx Active 11s
### --- 為需要部署的宿主機打標籤
[root@k8s-master01 ingress-nginx]# kubectl label node k8s-master03 ingress=true //我們在k8s-master03上去部署Ingress,給master03打個label,因為在生產環境下並不是每個節點上都需要部署Ingress的,需要指定節點,哎Ingress的配置檔案中匹配這個標籤就可以了
node/k8s-master03 labeled
### --- 安裝ingress-nginx
~~~ 提示資訊可以使用這個例子去建立一個Ingress
[root@k8s-master01 ingress-nginx]# helm install ingress-nginx -n ingress-nginx .
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: nginx
name: example
namespace: foo
spec:
rules:
- host: www.example.com
http:
paths:
- backend:
serviceName: exampleService
servicePort: 80
path: /
# This section is only required if TLS is to be enabled for the Ingress
tls:
- hosts:
- www.example.com
secretName: example-tls
### --- 檢視建立的ingress
~~~ 這個pod正在建立過程中,建立完成
[root@k8s-master01 ingress-nginx]# kubectl get po -n ingress-nginx
NAME READY STATUS RESTARTS AGE
ingress-nginx-controller-cxtgg 0/1 Running 0 2m9s
===============================END===============================
Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart ——W.S.Landor
來自為知筆記(Wiz)