接上文:https://blog.csdn.net/soso678/article/details/149607069?spm=1001.2014.3001.5502
定義后端應用與service
[root@master ingress]# cat my-nginx.yml
apiVersion: apps/v1
kind: Deployment
metadata:name: my-nginx
spec:selector:matchLabels:run: my-nginxreplicas: 2template:metadata:labels:run: my-nginxspec:containers:- name: my-nginximage: nginximagePullPolicy: IfNotPresentports:- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:name: my-nginxlabels:run: my-nginx
spec:ports:- port: 80targetPort: 80selector:run: my-nginx
定義secret
你可以通過設定包含 TLS 私鑰和證書的Secret 來保護 Ingress。 Ingress 資源只支持一個 TLS 端口 443,并假定 TLS 連接終止于 Ingress 節點 (與 Service 及其 Pod 間的流量都以明文傳輸)。 如果 Ingress 中的 TLS 配置部分指定了不同主機,那么它們將通過 SNI TLS 擴展指定的主機名(如果 Ingress 控制器支持 SNI)在同一端口上進行復用。 TLS Secret 的數據中必須包含鍵名為 tls.crt
的證書和鍵名為 tls.key
的私鑰, 才能用于 TLS 目的
先對購買的證書進行base64編碼
[root@master ssl]# cat ssl.key | base64 -w 0
[root@master ssl]# cat ssl.crt | base64 -w 0將證書定義成secret
[root@master ssl]# cat ssl-secret.yml
apiVersion: v1
kind: Secret
metadata:name: secret-tls
type: kubernetes.io/tls
data:tls.crt: base64 編碼的證書tls.key: base64 編碼的私鑰[root@master ssl]# kubectl apply -f ssl-secret.yml
secret/secret-tls created
[root@master ssl]# kubectl get secret
NAME TYPE DATA AGE
secret-tls kubernetes.io/tls 2 3s
定義ingress轉發規則
在 Ingress 中引用此 Secret 將會告訴 Ingress 控制器使用 TLS 加密從客戶端到負載均衡器的通道。 你要確保所創建的 TLS Secret 創建自包含 https-example.foo.com
的公共名稱 (Common Name,CN)的證書。這里的公共名稱也被稱為全限定域名(Fully Qualified Domain Name,FQDN)。
說明:
注意,不能針對默認規則使用 TLS,因為這樣做需要為所有可能的子域名簽發證書。 因此,tls
字段中的 hosts
的取值需要與 rules
字段中的 host
完全匹配。
[root@master ssl]# cat nginx-ingress.yml
kind: Ingress
apiVersion: networking.k8s.io/v1
metadata:name: test-https-ingress
spec:ingressClassName: nginxtls:- hosts:- www.test-nginx.comsecretName: secret-tlsrules:- host: www.test-nginx.comhttp:paths:- path: /pathType: Prefixbackend:service:name: my-nginxport:number: 80
[root@master ssl]# kubectl apply -f nginx-ingress.yml
ingress.networking.k8s.io/test-https-ingress created
[root@master ssl]# kubectl get ingress
NAME CLASS HOSTS ADDRESS PORTS AGE
test-https-ingress nginx www.test-nginx.com 80, 443 4s
nginx-ingress-controller運行在node1,node2兩個節點上。
如果網絡中有dns服務器,在dns中把這兩個域名映射到nginx-ingress-controller運行的任意一個節點上,如果沒有dns服務器只能修改host文件了。
任意一個節點上操作:(客戶端解析)
我這里有兩個節點部署了控制器,ip分別為172.16.229.7,172.16.229.8 ,如果有多個,可以隨便選。
在wind電腦設置本地解析
172.16.229.7 www.test-nginx.com