初學K8s,隨著學習和研究的不斷深入,慢慢發現使用Service+NodePort方式訪問Pod的應用是不安全的,因為隨著不同Pod應用的增加,宿主機暴露出來的埠就會越來越多,因此宿主機的安全性就會出現很多問題,因此,Ingress-nginx就進入了學習的視野,
Ingress-nginx是什么,有哪些強大的功能和優點,這里就不贅述了,網上很多介紹,感興趣的可以自己Bing(https://cn.bing.com/)搜索,
1、Ingress-nginx下載
官方版本發布頁面:https://github.com/kubernetes/ingress-nginx/releases
目前官方的最新正式版的版本號為:0.48.1,可以點擊、下載tar.gz包,

下載后解壓壓縮包,可以在下面的目錄找到很多子目錄,子目錄下面就是不同環境下部署Ingress-nginx的劇本(yaml)檔案,
ingress-nginx-controller-v0.48.1\deploy\static\provider
這里給大家對比下 cloud 和 baremetal 部署劇本的區別,就兩處:


其實差別就是type不同,cloud使用LoadBalance,baremetal使用的是NodePort,而LoadBalance主要用于公有云(如阿里云)上,因此,本次技術驗證使用的是baremetal目錄下的deploy.yaml劇本檔案,
2、依賴鏡像下載
在劇本檔案里面有3處(共2個)image配置,分別是:
image: k8s.gcr.io/ingress-nginx/controller:v0.48.1@sha256:e9fb216ace49dfa4a5983b183067e97496e7a8b307d2093f4278cd550c303899
image: docker.io/jettech/kube-webhook-certgen:v1.5.1
由于本地服務器與公網是不通的,因此我們需要從能連接外網的Linux服務器上把上面兩個docker鏡像下載下來,然后匯出為tar包,再匯入到內網服務器,重命名,最后再上傳到本地的Harbor倉庫,
# 鏡像下載
$ docker pull docker.io/jettech/kube-webhook-certgen:v1.5.1
$ docker pull k8s.gcr.io/ingress-nginx/controller:v0.48.1
# 備注:由于網路原因,第二個包從國內無法直接下載,因此需要從阿里云上下載,
# 鏡像匯出
$ docker save -o kube-webhook-certgen-1.5.1.tar docker.io/jettech/kube-webhook-certgen:v1.5.1
$ docker save -o ingress-nginx-controller-0.48.1.tar k8s.gcr.io/ingress-nginx/controller:v0.48.1
# 鏡像匯入
$ docker load < ./kube-webhook-certgen-1.5.1.tar
$ docker load < ./ingress-nginx-controller-0.48.1.tar
# 鏡像重命名(xxx.xxx.xxx.xxx為Harbor倉庫的IP地址)
$ docker tag docker.io/jettech/kube-webhook-certgen:v1.5.1 xxx.xxx.xxx.xxx/jettech/kube-webhook-certgen:v1.5.1
$ docker rmi docker.io/jettech/kube-webhook-certgen:v1.5.1
$ docker tag k8s.gcr.io/ingress-nginx/controller:v0.48.1 xxx.xxx.xxx.xxx/ingress-nginx/controller:v0.48.1
$ docker rmi k8s.gcr.io/ingress-nginx/controller:v0.48.1
# 鏡像上傳到Harbor倉庫
$ docker push xxx.xxx.xxx.xxx/jettech/kube-webhook-certgen:v1.5.1
$ docker push xxx.xxx.xxx.xxx/ingress-nginx/controller:v0.48.1
$ docker rmi xxx.xxx.xxx.xxx/jettech/kube-webhook-certgen:v1.5.1
$ docker rmi xxx.xxx.xxx.xxx/ingress-nginx/controller:v0.48.1
備注:
1、jettech、ingress-nginx這兩個專案目錄需要在Harbor上提前建好;
2、jettech、ingress-nginx這兩個專案目錄的權限需要設定為公開;
3、修改鏡像地址
我們將 baremetal/deploy.yaml 劇本檔案里面的image地址修改為下面的即可:
---------------省略其他配置---------------
spec:
dnsPolicy: ClusterFirst
containers:
- name: controller
image: xxx.xxx.xxx.xxx/ingress-nginx/controller:v0.48.1
imagePullPolicy: IfNotPresent
lifecycle:
preStop:
exec:
command:
- /wait-shutdown
---------------省略其他配置---------------
spec:
containers:
- name: create
image: xxx.xxx.xxx.xxx/jettech/kube-webhook-certgen:v1.5.1
imagePullPolicy: IfNotPresent
args:
- create
- --host=ingress-nginx-controller-admission,ingress-nginx-controller-admission.$(POD_NAMESPACE).svc
- --namespace=$(POD_NAMESPACE)
- --secret-name=ingress-nginx-admission
---------------省略其他配置---------------
spec:
containers:
- name: patch
image: xxx.xxx.xxx.xxx/jettech/kube-webhook-certgen:v1.5.1
imagePullPolicy: IfNotPresent
args:
- patch
- --webhook-name=ingress-nginx-admission
- --namespace=$(POD_NAMESPACE)
- --patch-mutating=false
- --secret-name=ingress-nginx-admission
- --patch-failure-policy=Fail
4、配置K8s訪問Harbor倉庫的認證
有兩種方法,這里提供其中一種:
# 創建命名空間
$ kubectl create namespace ingress-nginx
$ kubectl get namespace ingress-nginx
# 創建secret
$ kubectl delete secret ingressregistrykey
$ kubectl create secret docker-registry ingressregistrykey --namespace=ingress-nginx --docker-server=xxx.xxx.xxx.xxx --docker-username=admin --docker-password=yourPassWord
$ kubectl get secret ingressregistrykey -n ingress-nginx
$ kubectl get secret ingressregistrykey -n ingress-nginx --output=yaml
5、修改劇本
在deploy.yaml劇本里面的image - spec模塊中配置下面的secret
imagePullSecrets:
- name: ingressregistrykey
注意:這里的格式很重要,上面的兩行要和container的縮進保持一致!
示例:
spec:
containers:
- name: create
image: xxx.xxx.xxx.xxx/jettech/kube-webhook-certgen:v1.5.1
imagePullPolicy: IfNotPresent
args:
- create
- --host=ingress-nginx-controller-admission,ingress-nginx-controller-admission.$(POD_NAMESPACE).svc
- --namespace=$(POD_NAMESPACE)
- --secret-name=ingress-nginx-admission
env:
- name: POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
restartPolicy: OnFailure
serviceAccountName: ingress-nginx-admission
securityContext:
runAsNonRoot: true
runAsUser: 2000
imagePullSecrets:
- name: ingressregistrykey
6、安裝Ingress-nginx
# 為了便于區分,將 deploy.yaml 重命名為 ingress-nginx.yaml
$ kubectl delete -f ingress-nginx.yaml
$ kubectl apply -f ingress-nginx.yaml
$ kubectl describe pod -n ingress-nginx
$ kubectl describe pod/ingress-nginx-admission-create-tf2sb --namespace=ingress-nginx
$ kubectl get pod -n ingress-nginx
NAME READY STATUS RESTARTS AGE
ingress-nginx-admission-create-tf2sb 0/1 Completed 0 9m48s
ingress-nginx-admission-patch-qgc4n 0/1 Completed 2 9m48s
ingress-nginx-controller-d96fc7768-bf5c2 1/1 Running 0 9m49s
至此,Ingress-nginxan安裝完成,在k8s dashboard里面可以發現有3個Pods,而Controller的狀態為Running,其他2個為Completed,

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/289829.html
標籤:其他
上一篇:WebRTC之端對端通話
