[TOC]
創(chuàng)新互聯(lián)專注于企業(yè)營銷型網(wǎng)站建設(shè)、網(wǎng)站重做改版、隆子網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、html5、商城網(wǎng)站制作、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)公司、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為隆子等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。我們有這樣的一個(gè)需求,就是把 Pod 集群升級(jí)為 https,目前的辦法就是要么每個(gè)容器配置 https,然后前端通過 Service 進(jìn)行調(diào)度,但是這樣配置起來會(huì)比較麻煩,以及每個(gè)容器的建立都通過 https ,也增加了建立連接的負(fù)擔(dān)。
我們需要一種這樣的改造,就是客戶端連接到 Service 是通過 https,而 Service 向后端 Pod 的調(diào)度通過 http,這樣可以極大的優(yōu)化我們的集群,這里我們就需要用到 Kubernetes 的另外一種資源 Ingress。
Ingress 就是一個(gè)負(fù)載均衡的應(yīng)用,它和 Service 的不同之處在于,Service 只可以支持 4 層的負(fù)載均衡,而 Ingress 是支持 7 層的負(fù)載均衡,支持 http 和 https,包括通過主機(jī)名的訪問已經(jīng)路徑訪問的過濾。
那為什么不直接使用 Nginx?這是因?yàn)樵?K8S 集群中,如果每加入一個(gè)服務(wù),我們都在 Nginx 中添加一個(gè)配置,其實(shí)是一個(gè)重復(fù)性的體力活,只要是重復(fù)性的體力活,我們都應(yīng)該通過技術(shù)將它干掉。
Ingress就可以解決上面的問題,其包含兩個(gè)組件Ingress Controller
和Ingress
:
我們是采用了三臺(tái)服務(wù)器的一個(gè)集群,部署文檔請(qǐng)查看我之前的博文。
IP | 角色 |
---|---|
192.168.1.200 | k8s-master |
192.168.1.201 | k8s-node01 |
192.168.1.202 | k8s-node02 |
[root@master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master Ready master 117s v1.13.0
node01 Ready <none> 52s v1.13.0
node02 Ready <none> 42s v1.13.0
我們這里只針對(duì)上面架構(gòu)圖中的域名www.wzlinux.com
改造成https。
我們將以官方的標(biāo)準(zhǔn)腳本為基礎(chǔ)進(jìn)行搭建,參考請(qǐng)戳官方文檔。官方文檔中要求執(zhí)行如下命令:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/mandatory.yaml
我們創(chuàng)建一個(gè)控制器wzlinux-deploy.yaml
,內(nèi)容如下:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: wzlinux-dep
spec:
replicas: 3
template:
metadata:
labels:
run: wzlinux
spec:
containers:
- name: wzlinux
image: wangzan18/mytest:v1
ports:
- containerPort: 8080
創(chuàng)建好之后查看如下:
[root@master ingress]# kubectl get pod
NAME READY STATUS RESTARTS AGE
wzlinux-dep-78d5d86c7c-fj8f5 1/1 Running 0 53m
wzlinux-dep-78d5d86c7c-hr6gd 1/1 Running 0 53m
wzlinux-dep-78d5d86c7c-jqf59 1/1 Running 0 53m
測(cè)試好 Pod 一些正常之后,我們?yōu)檫@一組 Pod 創(chuàng)建一個(gè) Service,文件wzlinux-svc.yaml
內(nèi)容如下:
apiVersion: v1
kind: Service
metadata:
name: wzlinux-svc
spec:
selector:
run: wzlinux
ports:
- port: 80
targetPort: 8080
這個(gè) Service 并不是我們用了代理訪問 Pod 的,只是用來ingress-controller
來進(jìn)行選擇控制使用的,所以上圖描述為虛線。
[root@master ingress]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 58m
wzlinux-svc ClusterIP 10.106.219.230 <none> 8080/TCP 50m
[root@master ingress]# curl 10.106.219.230:8080
Hello Kubernetes bootcamp! | Running on: wzlinux-dep-78d5d86c7c-fj8f5 | v=1
為了實(shí)現(xiàn)過濾以及 https 功能,我們需要?jiǎng)?chuàng)建 ingress 資源文件,ingress controller 把其中的資源加載到 nginx 里面,資源文件wzlinux-ingress.yaml
文件內(nèi)容如下:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: wzlinux-ingress
spec:
rules:
- host: www.wzlinux.com
http:
paths:
- path:
backend:
serviceName: wzlinux-svc
servicePort: 8080
我們這里先不改為 https,先使用虛擬主機(jī)域名過濾模式,創(chuàng)建好資源之后查看
[root@master ingress]# kubectl get ingress
NAME HOSTS ADDRESS PORTS AGE
wzlinux-ingress www.wzlinux.com 80 37m
可以看到配置了域名www.wzlinux.com
,其他地址訪問將返回404。
我們可以查看部署的 Nginx Pod 容器,我們?cè)O(shè)定的 ingress 資源會(huì)被 controller 更新到里面,我們可以查看如下:
[root@master ingress]# kubectl get pod -n ingress-nginx
NAME READY STATUS RESTARTS AGE
nginx-ingress-controller-766c77b7d4-dlcpf 1/1 Running 0 31m
為了是外網(wǎng)可以訪問到這個(gè) Nginx Pod,我們需要為其再創(chuàng)建一個(gè) Service,文件ingress-nginx.yaml
,文件內(nèi)容如下:
apiVersion: v1
kind: Service
metadata:
name: ingress-nginx
namespace: ingress-nginx
spec:
type: NodePort
ports:
- name: http
port: 80
targetPort: 80
nodePort: 30080
- name: https
port: 443
targetPort: 443
nodePort: 30443
selector:
app.kubernetes.io/name: ingress-nginx
測(cè)試是否正常,記得在/etc/hosts
中把域名執(zhí)行的IP改為node節(jié)點(diǎn)的地址。
[root@master ~]# curl 192.168.1.200:30080
<html>
<head><title>404 Not Found</title></head>
<body>
<center><h2>404 Not Found</h2></center>
<hr><center>nginx/1.15.6</center>
</body>
</html>
[root@master ~]# curl www.wzlinux.com:30080
Hello Kubernetes bootcamp! | Running on: wzlinux-dep-78d5d86c7c-hr6gd | v=1
可以看到通過域名訪問正常調(diào)度到后端,其他地址訪問返回404,目前整個(gè)流程已經(jīng)測(cè)試完成,下面我們升級(jí)為 https。
關(guān)于證書大家可以使用 openssl 制作,創(chuàng)建私有:
openssl genrsa -out wzlinux.key 2048
制作自簽證書。
openssl req -new -x509 -key wzlinux.key -out wzlinux.crt -subj /C=CN/ST=Shanghai/L=Shanghai/O=DevOps/CN=www.wzlinux.com
不過我這里使用阿里云的官方免費(fèi)證書,大家可以到阿里云進(jìn)行申請(qǐng)。
制作好證書之后下載即可,里面包含公鑰和私鑰。
可以使用 yaml 文件創(chuàng)建,文件名稱wzlinux-secret.yaml
內(nèi)容如下:
apiVersion: v1
kind: Secret
data:
tls.crt: base64 encoded cert
tls.key: base64 encoded key
metadata:
name: wzlinux-secret
namespace: default
type: Opaque
因?yàn)榫幋a的密碼太長,我們這里直接使用命令行進(jìn)行創(chuàng)建吧,操作比較簡單。
kubectl create secret tls wzlinux-secret --cert=wzlinux.crt --key=wzlinux.key
查看創(chuàng)建好的 secret。
[root@master ingress]# kubectl describe secret wzlinux-secret
Name: wzlinux-secret
Namespace: default
Labels: <none>
Annotations: <none>
Type: kubernetes.io/tls
Data
====
tls.crt: 1996 bytes
tls.key: 1675 bytes
重新編輯wzlinux-ingress.yaml
,增加一個(gè) tls 字段:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: wzlinux-ingress
spec:
tls:
- hosts:
- www.wzlinux.com
secretName: wzlinux-secret
rules:
- host: www.wzlinux.com
http:
paths:
- path:
backend:
serviceName: wzlinux-svc
servicePort: 8080
打開瀏覽器,記得修改好 hosts 域名解析。
foo.bar.com -> 178.91.123.132 -> / foo service1:4200
/ bar service2:8080
配置文件我們?cè)O(shè)置為如下:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: simple-fanout-example
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: foo.bar.com
http:
paths:
- path: /foo
backend:
serviceName: service1
servicePort: 4200
- path: /bar
backend:
serviceName: service2
servicePort: 8080
foo.bar.com --| |-> foo.bar.com s1:80
| 178.91.123.132 |
bar.foo.com --| |-> bar.foo.com s2:80
配置文件內(nèi)容格式如下:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: name-virtual-host-ingress
spec:
rules:
- host: first.bar.com
http:
paths:
- backend:
serviceName: service1
servicePort: 80
- host: second.foo.com
http:
paths:
- backend:
serviceName: service2
servicePort: 80
- http:
paths:
- backend:
serviceName: service3
servicePort: 80
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: tls-example-ingress
spec:
tls:
- hosts:
- sslexample.foo.com
secretName: testsecret-tls
rules:
- host: sslexample.foo.com
http:
paths:
- path: /
backend:
serviceName: service1
servicePort: 80
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
網(wǎng)頁標(biāo)題:Kubernetes使用ingress配置https集群(十五)-創(chuàng)新互聯(lián)
文章轉(zhuǎn)載:http://aaarwkj.com/article16/ccdddg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)公司、品牌網(wǎng)站設(shè)計(jì)、定制開發(fā)、品牌網(wǎng)站制作、電子商務(wù)、微信小程序
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容