k8s 用ingress暴露集群環境中的服務。


一、.集群暴露服務的方式有兩種

1. 使用nodeport型的service暴露

    注意:無法使用kube-proxy的ipvs模型,只能使用iptable模型 

2.使用ingress資源暴露

   注意:ingress 只能調度暴露7層應用,特指http和https協議。

這里我們采用ingress-nginx軟件暴露,而ingress常用的暴露軟件有Ingress-nginx、HAproxy、Traefik...

要理解ingress,需要區分兩個概念,ingress和ingress-controller:

    • ingress對象:
      指的是k8s中的一個api對象,一般用yaml配置。作用是定義請求如何轉發到service的規則,可以理解為配置模板。
    • ingress-controller:
      具體實現反向代理及負載均衡的程序,對ingress定義的規則進行解析,根據配置的規則來實現請求轉發

簡單來說,ingress-controller才是負責具體轉發的組件,通過各種方式將它暴露在集群入口,外部對集群的請求流量會先到ingress-controller,而ingress對象是用來告訴ingress-controller該如何轉發請求,比如哪些域名哪些path要轉發到哪些服務等等。

二、ingress-controller和ingress部署

   1. 部署ingress-controller 

之前部署都是在 https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/mandatory.yaml 獲取ingress-controller的yaml腳本,目前站點不能訪問,因此直接去github 獲取ingress

git clone https://github.com/nginxinc/kubernetes-ingress.git

修改nginx-ingress-controller.yaml

 vim ingress-nginx/docs/examples/static-ip/nginx-ingress-controller.yaml

配置文件比較多,這里只貼apiVersion的配置

具體修改方式可以參考https://segmentfault.com/a/1190000019908991

 

 

quay.io鏡像可能比較慢,這里用阿里的鏡像

 registry.cn-hangzhou.aliyuncs.com/google_containers/nginx-ingress-controller:0.25.0

 

 

然后創建 nginx-ingress-controller的pod

k8smaster#  kubectl apply -f ingress-nginx/docs/examples/static-ip/nginx-ingress-controller.yaml 

接着給node服務器貼標簽

k8smaster# kubectl label nodes node1 custom/ingress-controller-ready=true

查看pod

k8smaster#  kubectl get pod -n ingress-nginx
NAME READY STATUS RESTARTS AGE
nginx-ingress-controller-h5cxf 1/1 Running 0 47m

檢查部署情況

 k8smaster#  kubectl get daemonset -n ingress-nginx

NAME                              DESIRED  CURRENT  READY UP-TO-DATE AVAILABLE  NODE SELECTOR                                AGE
nginx-ingress-controller     1                1                   1         1                     1                 custom/ingress-controller-ready=true     3h13m

查詢基本信息

 k8smaster# kubectl describe daemonset nginx-ingress-controller -n ingress-nginx

暴露nginx-controller

在node節點上查看nginx端口

 

 

 

2.配置ingress資源

vim ingress-nginx/docs/examples/static-ip/nginx-ingress.yaml

 

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
         name: ingress-nginx
spec:
   rules:
   - host: test.aaa.com                         #將此域名映射為你的服務

     http:
        paths:
        - path: /                                      #域名后的路徑
          backend:
               serviceName: java-demo    #java-demo 是本地已有的service服務
               servicePort: 80

 

 

 kubectl apply -f nginx-ingress.yaml

最后配置hosts  將test.aaa.com 解析到node的ip

curl test.aaa.com

 

#參考鏈接

https://www.cnblogs.com/fanggege/p/11953688.html

https://www.cnblogs.com/songqingbo/articles/12487939.html

https://segmentfault.com/a/1190000019908991

https://github.com/kubernetes/ingress-nginx/blob/master/charts/ingress-nginx/templates/controller-daemonset.yaml


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM