附020.Nginx-ingress部署及使用

来源:https://www.cnblogs.com/itzgr/archive/2020/06/02/13030762.html
-Advertisement-
Play Games

一 手動部署-官網版1.1 獲取資源[root@master01 ~]# mkdir ingress[root@master01 ~]# cd ingress/[root@master01 ingress]# git clone https://github.com/nginxinc/kuberne ...


一 手動部署-官網版

1.1 獲取資源

[root@master01 ~]# mkdir ingress

[root@master01 ~]# cd ingress/

[root@master01 ingress]# git clone https://github.com/nginxinc/kubernetes-ingress/

[root@master01 ingress]# cd kubernetes-ingress/deployments

[root@master01 ingress]# git checkout v1.7.0

1.2 安裝RBAC

[root@master01 deployments]# kubectl apply -f common/ns-and-sa.yaml #部署namespace及ServiceAccount

[root@master01 deployments]# kubectl apply -f rbac/rbac.yaml #部署RBAC角色及許可權等

1.3 安裝基礎資源

[root@master01 deployments]# kubectl apply -f common/default-server-secret.yaml

說明:

創建TLS證書和NGINX中預設伺服器的secret。預設伺服器返回Not Found頁面,其中包含404狀態代碼,用於未定義的所有訪問規則請求的返回值。預設包含了一個自簽名的證書和生成的密鑰。

[root@master01 deployments]# kubectl apply -f common/nginx-config.yaml

[root@master01 deployments]# kubectl apply -f common/vs-definition.yaml

[root@master01 deployments]# kubectl apply -f common/vsr-definition.yaml

[root@master01 deployments]# kubectl apply -f common/ts-definition.yaml #創建虛擬主機

[root@master01 deployments]# kubectl apply -f common/gc-definition.yaml

[root@master01 deployments]# kubectl apply -f common/global-configuration.yaml

1.4 安裝ingress controllers

[root@master01 deployments]# vi daemon-set/nginx-ingress.yaml

  1 ……
  2           - -global-configuration=$(POD_NAMESPACE)/nginx-configuration
  3 ……

[root@master01 deployments]# kubectl apply -f daemon-set/nginx-ingress.yaml

[root@master01 deployments]# kubectl get pods --namespace=nginx-ingress

NAME READY STATUS RESTARTS AGE

nginx-ingress-cqv2m 1/1 Running 0 43s

nginx-ingress-fpmbv 1/1 Running 0 43s

nginx-ingress-kdl9p 1/1 Running 0 43s

nginx-ingress-lggw9 1/1 Running 0 43s

nginx-ingress-lnw28 1/1 Running 0 43s

nginx-ingress-z8rn8 1/1 Running 0 43s

1.5 創建ingress controllers service

[root@master01 deployments]# vi service/nodeport.yaml

  1 apiVersion: v1
  2 kind: Service
  3 metadata:
  4   name: nginx-ingress
  5   namespace: nginx-ingress
  6 spec:
  7   type: NodePort
  8   ports:
  9   - port: 80
 10     targetPort: 80
 11     protocol: TCP
 12     name: http
 13     nodePort: 30011
 14   - port: 443
 15     targetPort: 443
 16     protocol: TCP
 17     name: https
 18     nodePort: 30012
 19   selector:
 20     app: nginx-ingress

[root@master01 deployments]# kubectl create -f service/nodeport.yaml

[root@master01 deployments]# kubectl get svc nginx-ingress --namespace=nginx-ingress

[root@master01 deployments]# kubectl describe svc nginx-ingress --namespace=nginx-ingress

clipboard

參考文檔:https://docs.nginx.com/nginx-ingress-controller/installation/installation-with-manifests/。

二 手動部署-github社區版(推薦)

2.1 獲取資源

[root@master01 ~]# mkdir ingress

[root@master01 ~]# cd ingress/

[root@master01 ingress]# wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-0.32.0/deploy/static/provider/cloud/deploy.yaml

[root@master01 ingress]# vi deploy.yaml

  1 ……
  2 apiVersion: apps/v1
  3 kind: Deployment
  4 ……
  5 spec:
  6   replicas: 3
  7 ……
  8             - --default-backend-service=$(POD_NAMESPACE)/default-http-backend
  9 ……
 10 apiVersion: v1
 11 kind: Service
 12 ……
 13   name: ingress-nginx-controller
 14 ……
 15 spec:
 16   type: NodePort
 17   externalTrafficPolicy: Local
 18   ports:
 19     - name: http
 20       port: 80
 21       protocol: TCP
 22       targetPort: http
 23       nodePort: 80
 24     - name: https
 25       port: 443
 26       protocol: TCP
 27       targetPort: https
 28       nodePort: 443
 29 ……

[root@master01 ingress]# kubectl create -f deploy.yaml

提示:添加預設backend需要等待default-backend創建完成controllers才能成功部署。

2.2 創建default backend

[root@master01 ingress]# vi default-backend.yaml

  1 ---
  2 apiVersion: apps/v1
  3 kind: Deployment
  4 metadata:
  5   name: default-http-backend
  6   labels:
  7     app.kubernetes.io/name: default-http-backend
  8     app.kubernetes.io/part-of: ingress-nginx
  9   namespace: ingress-nginx
 10 spec:
 11   replicas: 1
 12   selector:
 13     matchLabels:
 14       app.kubernetes.io/name: default-http-backend
 15       app.kubernetes.io/part-of: ingress-nginx
 16   template:
 17     metadata:
 18       labels:
 19         app.kubernetes.io/name: default-http-backend
 20         app.kubernetes.io/part-of: ingress-nginx
 21     spec:
 22       terminationGracePeriodSeconds: 60
 23       containers:
 24         - name: default-http-backend
 25           # Any image is permissible as long as:
 26           # 1. It serves a 404 page at /
 27           # 2. It serves 200 on a /healthz endpoint
 28           image: k8s.gcr.io/defaultbackend-amd64:1.5
 29           livenessProbe:
 30             httpGet:
 31               path: /healthz
 32               port: 8080
 33               scheme: HTTP
 34             initialDelaySeconds: 30
 35             timeoutSeconds: 5
 36           ports:
 37             - containerPort: 8080
 38           resources:
 39             limits:
 40               cpu: 10m
 41               memory: 20Mi
 42             requests:
 43               cpu: 10m
 44               memory: 20Mi
 45 
 46 ---
 47 apiVersion: v1
 48 kind: Service
 49 metadata:
 50   name: default-http-backend
 51   namespace: ingress-nginx
 52   labels:
 53     app.kubernetes.io/name: default-http-backend
 54     app.kubernetes.io/part-of: ingress-nginx
 55 spec:
 56   ports:
 57     - port: 80
 58       targetPort: 8080
 59   selector:
 60     app.kubernetes.io/name: default-http-backend
 61     app.kubernetes.io/part-of: ingress-nginx
 62 ---

[root@master01 ingress]# kubectl create -f default-backend.yaml

2.3 確認驗證

[root@master01 ingress]# kubectl get pods -n ingress-nginx

[root@master01 ingress]# kubectl get svc -n ingress-nginx

clipboard

參考文檔:https://github.com/kubernetes/ingress-nginx/blob/master/docs/deploy/index.md。

三 ingress使用

3.1 創建demo環境

[root@master01 ingress]# vi deploy-demo01.yaml #創建第一個用於測試的svc和pod

  1 apiVersion: v1
  2 kind: Service
  3 metadata:
  4   name: mydemo01svc
  5   namespace: default
  6 spec:
  7   selector:
  8     app: mydemo01
  9   ports:
 10   - name: http
 11     port: 80
 12     targetPort: 80
 13 ---
 14 apiVersion: apps/v1
 15 kind: Deployment
 16 metadata:
 17   name: mydemo01pod
 18 spec:
 19   replicas: 3
 20   selector:
 21     matchLabels:
 22       app: mydemo01
 23   template:
 24     metadata:
 25       labels:
 26         app: mydemo01
 27     spec:
 28       containers:
 29       - name: myapp
 30         image: ikubernetes/myapp:v2
 31         ports:
 32         - name: httpd
 33           containerPort: 80

[root@master01 ingress]# echo '<h1>Hello world!</h1>' > index.html #創建Tomcat測試頁面

[root@master01 ingress]# scp index.html root@worker01:/etc/kubernetes/

[root@master01 ingress]# scp index.html root@worker02:/etc/kubernetes/

[root@master01 ingress]# scp index.html root@worker02:/etc/kubernetes/

[root@master01 ingress]# vi deploy-demo02.yaml #創建第二個用於測試的svc和pod

  1 apiVersion: v1
  2 kind: Service
  3 metadata:
  4   name: mydemo02svc
  5   namespace: default
  6 spec:
  7   selector:
  8     app: mydemo02
  9   ports:
 10   - name: httpd
 11     port: 8080
 12     targetPort: 8080
 13 
 14 ---
 15 apiVersion: apps/v1
 16 kind: Deployment
 17 metadata:
 18   name: mydemo02pod
 19 spec:
 20   replicas: 3
 21   selector:
 22     matchLabels:
 23       app: mydemo02
 24   template:
 25     metadata:
 26       labels:
 27         app: mydemo02
 28     spec:
 29       containers:
 30       - name: mytomcat
 31         image: tomcat:9
 32         ports:
 33         - name: httpd
 34           containerPort: 8080
 35         volumeMounts:
 36         - mountPath: "/usr/local/tomcat/webapps/ROOT/index.html"
 37           name: sample-volume
 38           readOnly: true
 39       volumes:
 40       - name: sample-volume
 41         hostPath:
 42           type: File
 43           path: /etc/kubernetes/index.html

[root@master01 ingress]# kubectl apply -f deploy-demo01.yaml

[root@master01 ingress]# kubectl apply -f deploy-demo02.yaml

[root@master01 ingress]# kubectl get pods -o wide

[root@master01 ingress]# kubectl get svc -o wide

clipboard

3.2 創建ingress策略

[root@master01 ingress]# vi deploy-demo-ingress-http.yaml

  1 apiVersion: extensions/v1beta1
  2 kind: Ingress
  3 metadata:
  4   name: ingress-mydemo01
  5   namespace: default
  6   annotations:
  7     kubernetes.io/ingress.class: "nginx"
  8 spec:
  9   rules:
 10   - host: demo01.odocker.com
 11     http:
 12       paths:
 13       - path:
 14         backend:
 15           serviceName: mydemo01svc
 16           servicePort: 80
 17 ---
 18 apiVersion: extensions/v1beta1
 19 kind: Ingress
 20 metadata:
 21   name: ingress-mydemo02
 22   namespace: default
 23   annotations:
 24     kubernetes.io/ingress.class: "nginx"
 25 spec:
 26   rules:
 27   - host: demo02.odocker.com
 28     http:
 29       paths:
 30       - path:
 31         backend:
 32           serviceName: mydemo02svc
 33           servicePort: 8080

[root@master01 ingress]# kubectl apply -f deploy-demo-ingress-http.yaml

[root@master01 ingress]# kubectl get pods -o wide

[root@master01 ingress]# kubectl get svc -o wide

[root@master01 ingress]# kubectl get ingress -o wide

clipboard

3.3 確認驗證

添加demo01.odocker.com和demo02.odocker.com的解析。分別訪問兩個地址:

clipboard

參考:https://docs.nginx.com/nginx-ingress-controller/installation/installation-with-manifests/

四 ingress https使用

4.1 創建證書

使用自簽名證書,證書創建參考《附008.Kubernetes TLS證書介紹及創建》。

4.2 創建secret

[root@master01 ingress]# openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout demo02.key -out demo02.crt -subj "/CN=demo02.odocker.com"

[root@master01 ingress]# kubectl create secret generic demo02-tls --from-file=demo02.crt --from-file=demo02.key -n default

[root@master01 ingress]# kubectl get secret demo02-tls

NAME TYPE DATA AGE

demo02-tls Opaque 2 27s

4.3 創建TLS ingress策略

[root@master01 ingress]# vi deploy-demo-ingress-https.yaml

  1 apiVersion: extensions/v1beta1
  2 kind: Ingress
  3 metadata:
  4   name: ingress-mydemo02-https
  5   namespace: default
  6   annotations:
  7     kubernets.io/ingress.class: "nginx"
  8 spec:
  9   tls:
 10   - hosts:
 11     - demo02.odocker.com
 12     secretName: demo02-tls
 13   rules:
 14   - host: demo02.odocker.com
 15     http:
 16       paths:
 17       - path:
 18         backend:
 19           serviceName: mydemo02svc
 20           servicePort: 8080

[root@master01 ingress]# kubectl apply -f deploy-demo-ingress-https.yaml

4.4 確認驗證

瀏覽器訪問:https://rancher.linuxsb.com/。

clipboard

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • [導讀] Linux設備林林總總,嵌入式開發一個繞不開的話題就是設備驅動開發,在做具體設備驅動開發之前,有必要對Linux設驅動模型有一個相對清晰的認識,將會幫助驅動開發,明白具體驅動介面操作符相應都做些什麼。 個人對於驅動模型的理解概括起來就是一句話:利用面向對象編程思想,實現設備分層管理軟體體系 ...
  • 容器雲技術 Docker引擎的安裝 準備兩台虛擬機,一臺為docker主節點,一臺為docker客戶端,安裝CentOS7.5_1804系統 基礎環境配置 網卡配置(master節點) 修改docker主節點主機名 # hostnamectl set-hostname master 配置網卡 # v ...
  • help命令 功能說明:查看shell內部命令的幫助信息 用法 help [內部命令名] 示例1:不帶任何選項的help命令顯示所有的shell內部命令 [root@node1 ~]# help 示例2:顯示cd命令的使用方法 [root@node1 ~]# help cd cd: cd [-L|[ ...
  • 大家好,我是良許。 文件是我們在電腦里最珍貴的財富,我們經常工作了老半天,然後出來的成果就只是一個文件而已。特別是程式員,我們寫了半天的代碼,結果也就是一個個代碼文件而已。 但是,我們都有過這樣慘痛的經歷——工作了老半天,結果不小心把文件刪除了…… 這時候,你的心情是怎樣的?痛苦?自責?無奈? 今天 ...
  • 在使用MPI框架中,需要多機進行通信進行並行計算;現在配置多個主機進行運行mpi程式,併進行通信;涉及到ssh無密碼和nfs文件系統配置; 參考文檔: https://mpitutorial.com/tutorials/running-an-mpi-cluster-within-a-lan/ 配置如 ...
  • 回到目錄 好了,在介紹完前面各種電路的re模型分析方法後,本節我們再看一下另一種建模思路的混合等效模型。這種模型早期曾被廣泛使用,雖然現在我們一般都用更好用的re模型,但這種混合等效模型還是有必要瞭解一下的。 而且,各大半導體器件廠商在數據規格書給出的也都是的混合等效模型參數。廠家這麼做的原因有二: ...
  • 1.基本操作 # 查看防火牆狀態 service iptables status # 停止防火牆 service iptables stop # 啟動防火牆 service iptables start # 重啟防火牆 service iptables restart # 永久關閉防火牆 chkco ...
  • 與大多數其他半導體存儲技術不同,數據存儲為磁性狀態而不是電荷,並通過測量電阻來感測而不幹擾磁性狀態。使用磁性狀態進行存儲有兩個主要好處。首先磁極化不會像電荷一樣隨時間泄漏,因此即使關閉電源,信息也會被存儲。其次在兩種狀態之間切換磁極化不涉及電子或原子的實際運動,因此不存在已知的磨損機制。 Evers ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...