Kubernetes(k8s)ingress-Nginx

Ingress

Ingress為Kubernetes集群中的服務(wù)提供了入口,可以提供負(fù)載均衡、SSL終止和基于名稱的虛擬主機(jī),在生產(chǎn)環(huán)境中常用的Ingress有Treafik、Nginx、HAProxy、Istio等。

基本概念

在Kubernetesv 1.1版中添加的Ingress用于從集群外部到集群內(nèi)部Service的HTTP和HTTPS路由,流量從Internet到Ingress再到Services最后到Pod上,通常情況下,Ingress部署在所有的Node節(jié)點(diǎn)上。
Ingress可以配置提供服務(wù)外部訪問的URL、負(fù)載均衡、終止SSL,并提供基于域名的虛擬主機(jī)。但I(xiàn)ngress不會暴露任意端口或協(xié)議。

Ingress安裝

首先安裝helm管理工具:https://helm.sh/docs/intro/install/

下載 需要的版本
解壓(tar -zxvf helm-v3.0.0-linux-amd64.tar.gz)
在解壓目中找到helm程序,移動到需要的目錄中(mv linux-amd64/helm /usr/local/bin/helm)
然后就可以執(zhí)行客戶端程序并 添加穩(wěn)定倉庫: helm help.

使用helm安裝ingress:https://kubernetes.github.io/ingress-nginx/deploy/#using-helm
1.添加ingress的helm倉庫(課程講解的版本已經(jīng)上傳至百度網(wǎng)盤)

helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx

2.下載ingress的helm包至本地

helm pull ingress-nginx/ingress-nginx(如已從網(wǎng)盤下載,省略此步驟)

3.更改對應(yīng)的配置

tar xf ingress-nginx-3.6.0.tgz
cd ingress-nginx
vim values.yaml

4.需要修改的位置

a)Controller和admissionWebhook的鏡像地址,需要將公網(wǎng)鏡像同步至公司內(nèi)網(wǎng)鏡像倉庫(https://blog.csdn.net/weixin_39961559/article/details/80739352,或者參考這個連接: https://blog.csdn.net/sinat_35543900/article/details/103290782)
Controller鏡像地址:registry.cn-beijing.aliyuncs.com/dotbalo/controller
admissionWebhook鏡像地址:registry.cn-beijing.aliyuncs.com/dotbalo/kube-webhook-certgen
b)hostNetwork設(shè)置為true
c)dnsPolicy設(shè)置為 ClusterFirstWithHostNet
d)類型更改為kind: DaemonSet
e)type: ClusterIP
f)nodeSelector:
    kubernetes.io/os: linux
    ingress: "true"
  1. 部署ingress
給需要部署ingress的節(jié)點(diǎn)上打標(biāo)簽
kubectl label node k8s-master03 ingress=true
kubectl create ns ingress-nginx
helm install ingress-nginx -n ingress-nginx .
  1. 將ingress controller部署至Node節(jié)點(diǎn)(ingress controller不能部署在master節(jié)點(diǎn),需要安裝視頻中的步驟將ingress controller部署至Node節(jié)點(diǎn),生產(chǎn)環(huán)境最少三個ingress controller,并且最好是獨(dú)立的節(jié)點(diǎn))
kubectl label node k8s-node01 ingress=true  #添加標(biāo)簽
kubectl label node k8s-master03 ingress-    #取消標(biāo)簽

Ingress使用

創(chuàng)建一個ingress:

# cat ingress.yaml 
apiVersion: networking.k8s.io/v1beta1 # networking.k8s.io/v1 / extensions/v1beta1 
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: "nginx"
  name: example
spec:
  rules: # 一個Ingress可以配置多個rules
  - host: foo.bar.com # 域名配置,可以不寫,匹配*, *.bar.com
    http:
      paths: # 相當(dāng)于nginx的location配合,同一個host可以配置多個path / /abc
      - backend:
          serviceName: nginx-svc 
          servicePort: 80
        path: /

創(chuàng)建一個多域名ingress

cat ingress-mulDomain.yaml 
apiVersion: networking.k8s.io/v1beta1 # networking.k8s.io/v1 / extensions/v1beta1 
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: "nginx"
  name: example
spec:
  rules: # 一個Ingress可以配置多個rules
  - host: foo.bar.com # 域名配置,可以不寫,匹配*, *.bar.com
    http:
      paths: # 相當(dāng)于nginx的location配合,同一個host可以配置多個path / /abc
      - backend:
          serviceName: nginx-svc 
          servicePort: 80
        path: /
  - host: foo2.bar.com # 域名配置,可以不寫,匹配*, *.bar.com
    http:
      paths: # 相當(dāng)于nginx的location配合,同一個host可以配置多個path / /abc
      - backend:
          serviceName: nginx-svc-external
          servicePort: 80
        path: /
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容