中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Kubernetes中Ingress介紹

發布時間:2020-05-25 15:18:54 來源:億速云 閱讀:341 作者:鴿子 欄目:系統運維

如何暴露您Kubernetes集群內部 "應用服務" 并向外(互聯網)提供訪問服務!!!

  • 通常情況下集群內部Service和Pod僅可在集群內部網絡中通過IP地址訪問。所有到達邊界路由器的流量或被丟棄或被轉發到其它地方。(Ingress 的存在即是完成以上之目的)
  • 不直接使用Ingress資源,也可有多種方法暴露Service。
    • 使用 Service.Type=LoadBalancer
    • 使用 Service.Type=NodePort
    • 有幾個是廢棄的
  • 未定義Ingress的情況下,外部請求訪問內部服務時可能這樣
Internet ---------> Service
  • 定義Ingress授權請求服務入站連接到達集群的規訪問則可能這樣
Internet ------> Ingress ------> Service

Ingress 它能做什么

  • 可以將 Ingress 配置為提供服務外部可訪問的 URL、負載均衡流量、終止 SSL / TLS 并提供基于名稱的虛擬主機。Ingress 控制器通常負責通過負載均衡器來實現 Ingress,盡管它也可以配置邊緣路由器或其他前端來幫助處理流量。
  • Ingress 不會公開任意端口或協議。 將 HTTP 和 HTTPS 以外的服務公開到 Internet 時,通常使用 Service.Type=NodePort 或者 Service.Type=LoadBalancer 類型的服務,典型的訪問方式是 "HTTP"。
  • 先決條件:
    • 您必須具有 ingress 控制器才能滿足 Ingress 的要求。僅創建 Ingress 資源無效,比如ingress-nginx。
    • 一定要檢查一下控制器的 beta 限制。 在 GCE/GKE 之外的環境中,需要將控制器部署 為 Pod。
  • 默認后段:
    • 如果沒有主機或路徑與 Ingress 對象中的 HTTP 請求匹配,則流量將路由到您的默認后端。
    • 默認后端通常是 Ingress 控制器的配置選項,并且未在 Ingress 資源中指定。
    • 更多更詳細的Ingress描述及使用方法    參考中文官方 Ingress 文檔

Ingress 控制器

  • 想讓Ingress資源工作您單獨部署個Ingress沒有用,您得部署一個Ingress  Controller來實現Ingress。
  • 與作為 kube-controller-manager 可執行文件的一部分運行的其他類型的控制器不同,Ingress 控制器不是隨集群自動啟動的。 基于此頁面,您可選擇最適合您的集群的 Ingress 控制器實現。
  • Kubernetes 作為一個項目,目前支持和維護 GCE 和 nginx 控制器。
  • 您可以在集群中部署和使用多個 Ingress 控制器,創建Ingress時使用 "ingress.class" 進行注釋。
  • 更多更詳細的控制器使用可  參考中文官方 Ingress controller 描述

多個Ingress控制器并存的示例
多個控制器切換使用,修改紅色字體即可

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: test
  annotations:
    kubernetes.io/ingress.class: "nginx"
spec:
  tls:
  - secretName: tls-secret
  backend:
    serviceName: echoheaders-https
    servicePort: 80

haproxy-ingress參考   haproxy-ingress in github

在使用kubeadm工具部署的集群下部署Ingress-nginx

  • Github站點:
https://github.com/kubernetes/ingress-nginx
https://github.com/kubernetes/ingress-nginx/blob/master/docs/deploy/index.md
  • Kubernetes站點:
https://kubernetes.github.io/ingress-nginx/
https://kubernetes.github.io/ingress-nginx/deploy/
  • 命令幫助
    rules:規則的對象列表,誰調度到誰那里去(路徑調度、主機調度)
    backend:調度到后端相關pod資源,關聯后段Pod,serviceName、servicePort
[root@node1 ~]# kubectl explain ingress.spec
[root@node1 ~]# kubectl explain ingress.spec.rules
  • 下載安裝nginx-ingress-controller
    需提前下載鏡像到本地,或者改用阿里云鏡像
[root@node1 ingress]# wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.27.1/deploy/static/mandatory.yaml
[root@node1 ingress]# kubectl apply -f mandatory.yaml
[root@node1 ingress]# kubectl get pods -n ingress-nginx
NAME                                       READY   STATUS    RESTARTS   AGE
nginx-ingress-controller-948ffd8cc-9nd4c   1/1     Running   0          10m
[root@node1 ingress]# 
[root@node1 ingress]# kubectl describe pods -n ingress-nginx
  • 創建一個Pod類型為NodePort的service用來接入互聯網請求
    修改yaml文件可添加nodePort來指定端口,這里采用默認
[root@node1 ingress]# wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.27.1/deploy/static/provider/baremetal/service-nodeport.yaml
[root@node1 ingress]# kubectl apply -f service-nodeport.yaml 
service/ingress-nginx created
[root@node1 ingress]# 
[root@node1 ingress]# kubectl get svc -n ingress-nginx
NAME            TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)                      AGE
ingress-nginx   NodePort   10.99.146.223   <none>        80:32116/TCP,443:30771/TCP   17s
[root@node1 ingress]# 
  • 通過互聯網測試訪問,看nginx的調度器是否配置成功
    任意集群地址訪問
[root@node1 ingress]# curl 172.12.0.10:32116
<html>
<head><title>404 Not Found</title></head>
<body>
<center><h2>404 Not Found</h2></center>
<hr><center>nginx/1.17.7</center>
</body>
</html>
[root@node1 ingress]# 

Nginx調度器本身調度已經可以正常工作了!!!
Nginx調度器本身調度已經可以正常工作了!!!
Nginx調度器本身調度已經可以正常工作了!!!
接下來就可以手動部署個應用,并通過nginx的調度器發布出去

手動部署tomcat應用服務,通過nginx調度器發布出去

  • NodePort類型的Tomcat創建
    把資源都寫在一個yaml文件內,使用三條橫線進行分割
[root@node1 pod]# cat tomcat-nodeport.yaml 
apiVersion: v1
kind: Service
metadata:
  name: tomcat
  namespace: default
spec:
  selector: 
    app: tomcat
    release: canary
  type: NodePort
  ports:
  - port: 8080
    targetPort: 8080
    nodePort: 30080
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: tomcat-demo
  namespace: default
spec:
  replicas: 2
  selector: 
    matchLabels:
      app: tomcat
      release: canary
  template:
    metadata:
      labels:
        app: tomcat
        release: canary
    spec:
      containers:
      - name: tomcat
        image: tomcat
        imagePullPolicy: IfNotPresent
        ports:
        - name: http
          containerPort: 8080
        - name: ajp
          containerPort: 8009
[root@node1 pod]# 

直接使用集群內部任意IP地址加30080端口進行訪問即可。

  • 通過Ingress形式發布Tomcat至外部
    提前下載好tomcat鏡像到本地,service資源和deploy資源寫在一個yaml文件內
[root@node1 pod]# cat deploy-svc-tomcat.yaml 
apiVersion: v1
kind: Service
metadata:
  name: tomcat
spec:
  selector:
    app: tomcat
    release: canary
  ports:
  - name: http
    targetPort: 8080
    port: 8080
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: tomcat-demo
spec:
  replicas: 2
  selector: 
    matchLabels:
      app: tomcat
      release: canary
  template:
    metadata:
      labels:
        app: tomcat
        release: canary
    spec:
      containers:
      - name: tomcat8
        image: tomcat
        imagePullPolicy: IfNotPresent
        ports:
        - name: http
          containerPort: 8080
[root@node1 pod]# 

創建完成后,接下來就可以為剛剛部署的tomcat制作一個ingress服務了

  • 為ingress類型的tomcat創建ingress服務
    您也可以創建帶ssl認證證書類型的tomcat服務,只需要購買ssl證書或只為了測試自建證書也可
[root@node1 pod]# cat tomcat-ingress.yaml 
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-tomcat
  namespace: default
  annotations:
    kubernetes.io/ingress.class: "nginx"
spec:
  rules:
  - host: tomcat.siyou.com
    http:
      paths:
      - path:
        backend:
          serviceName: tomcat
          servicePort: 8080
[root@node1 pod]# 

測試吧。配置好"tomcat.siyou.com"的解析,訪問的時候通過ingress調度器映射出去的端口訪問即可

  • 為了測試會用到的相關命令
    kubectl 的相關資源使用幫助 # kubectl explain pods or kubectl explain pods.spec
# 獲取默認空間下的pods資源詳情
[root@node1 pod]# kubectl get pods -o wide
# 描述默認空間下某個pods資源
[root@node1 pod]# kubectl describe pods tomcat-demo-655c78c49-ctd66
# 查看某個tomcat的日志,實時查看
[root@node1 pod]# kubectl logs tomcat-demo-655c78c49-ctd66 -f
# 查看默認空間下tomcat應用端口監聽狀態
[root@node1 pod]# kubectl exec tomcat-demo-655c78c49-ctd66 -- ss -tnl
# 進入到一個tomcat內部
[root@node1 pod]# kubectl exec -it tomcat-demo-655c78c49-ctd66 -- /bin/sh
# 查看默認名稱空間下的service詳情
[root@node1 pod]# kubectl get svc -o wide
# 獲取名稱空間為ingress-nginx下的pod資源情況
[root@node1 pod]# kubectl get pods -n ingress-nginx
# 查看ingress-nginx空間下pod詳情
[root@node1 pod]# kubectl describe pods -n ingress-nginx nginx-ingress-controller-948ffd8cc-9nd4c
# 查看默認名稱空間下的ingress
[root@node1 pod]# kubectl get ingress
更多 kubectl 命令的使用,"kubectl --help" 或者官方文檔 k8s kubectl overview


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

肇东市| 晋宁县| 抚宁县| 江津市| 公主岭市| 抚州市| 高密市| 永善县| 江北区| 安福县| 靖宇县| 民勤县| 西平县| 齐河县| 萨迦县| 东山县| 乌苏市| 萍乡市| 剑川县| 罗城| 万源市| 牙克石市| 建始县| 高阳县| 慈利县| 佛山市| 老河口市| 自贡市| 定结县| 潞西市| 元阳县| 民勤县| 兴安县| 梁平县| 鄂尔多斯市| 鹿泉市| 鄂伦春自治旗| 屯留县| 阿克| 溧水县| 伊通|