Ingress 配置
介紹
kubernetes Ingess 是有2部分組成马绝,Ingress Controller 和Ingress服務(wù)組成乘综,常用的Ingress Controller 是ingress-nginx裆装,工作的原理是:
Ingress Controller 會(huì)動(dòng)態(tài)感知集群中的Ingress的規(guī)則變化,然后讀取涛贯,動(dòng)態(tài)生成Nginx的配置文件厕氨,最后注入到運(yùn)行nginx的pod的中,然后會(huì)自動(dòng)reload篷就,配置生效射亏。
用kubernetes Ingress 是由于它是7層調(diào)度,可以直接卸載https會(huì)話,代理的后端的pod可以直接使用明文的http協(xié)議智润。
而Service NodePort得類型及舍,是4層得調(diào)度,做不到這點(diǎn)窟绷,然而現(xiàn)在https是一種趨勢(shì)锯玛,所以在kubernetes 對(duì)外暴露服務(wù)得時(shí)候我們還是要選擇Ingress。
流程
- 創(chuàng)建服務(wù)
apiVersion: v1
kind: Service
metadata:
name: myapp-ding
namespace: default
spec:
selector:
app: myapp
release: ding
ports:
- name: http
port: 80
targetPort: 80
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp-ding
namespace: default
spec:
replicas: 3
selector:
matchLabels:
app: myapp
release: ding
template:
metadata:
labels:
app: myapp
release: ding
spec:
containers:
- name: myapp-ding
image: ikubernetes/myapp:v2
ports:
- name: http
containerPort: 80
Ingress作用在服務(wù)端兼蜈,講服務(wù)暴露對(duì)外攘残,所以首先要?jiǎng)?chuàng)建想要暴露的服務(wù)
- 下載并部署ingress controller
在kubernetes 得github上下載ingress得yaml文件,地址:https://github.com/kubernetes/ingress-nginx/tree/master/deploy
所需文檔為: namespace.yaml, rbac.yaml ,with-rbac.yaml , configmap.yaml(包括了tcp和udp服務(wù)),
同時(shí)要想要介入外部流量为狸,還需要?jiǎng)?chuàng)建service-nodeport這個(gè)文件(這是一個(gè)service)歼郭。沒有這個(gè)文件,是無法通過外部訪問的辐棒。這個(gè)文件主要是為ingress controller創(chuàng)建了一個(gè)Nodeport類型的service病曾,例子如下 :
apiVersion: v1
kind: Service
metadata:
name: ingress-nginx
namespace: ingress-nginx
labels:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
spec:
type: NodePort
ports:
- name: http
port: 80
targetPort: 80
protocol: TCP
nodePort: 80
- name: https
port: 443
targetPort: 443
protocol: TCP
nodePort: 443
selector:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
如果遇到不能添加80端口的話,檢查kubernetes的apiserviser的配置文件
查看有沒有這句話service-node-port-range=1-65535
沒有的話加進(jìn)配置文件(加在service-cluster-ip-range=10.96.0.0/12 的下面)
重啟配置文件涉瘾,
然后nodeport就可以使用所用沒有被分配的端口知态。
然后應(yīng)用所有文件,
確認(rèn)ingress-controller是否成功運(yùn)行:
Kubectl get pods –n ingress-nginx
如果nginx-ingress-controller的狀態(tài)顯示Running則為成功立叛。
[圖片上傳失敗...(image-2a07f8-1549951819452)]
確認(rèn)nodeport服務(wù)是否成功開啟:
Kebuctl get svc –n ingress-nginx(這個(gè)為你service-nodeport啟的服務(wù)的名字):
如果不為空负敏,確認(rèn)后面端口是否正確,正確秘蛇,則此服務(wù)正確開啟
[圖片上傳失敗...(image-63f385-1549951819452)]
部署完過后其做,現(xiàn)在要寫ingress規(guī)則,主要就是要將規(guī)則注入到ingress-nginx pod的配置文件中赁还。(ingress-myapp.yaml)
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress-ding
namespace: default
annotations:
kubernetes.io/ingress.class: "nginx" //這里是說明ingress的類型使用的nginx妖泄,一定要說明這點(diǎn),否則ingress Controller 不知道是配置成那種類型的配置文件
spec:
rules:
- host: test.ding.com //使用的是虛擬主機(jī)的來訪問的
http:
paths:
- path:
backend:
serviceName: myapp-ding //代理的后端的pod的service艘策,通過這個(gè)service來生成nginx的upstrm
servicePort: 80
運(yùn)行這個(gè)文件.
Kubectl get ingress (確認(rèn)此規(guī)則有沒有開啟)
[圖片上傳失敗...(image-ad2468-1549951819452)]
- 外部客戶端訪問
首先要將訪問的客戶端機(jī)器配置域名解析
路徑:C:\Windows\System32\drivers\etc\hosts
添加172.17.130.61 test.ding.com(你設(shè)置的hostname)
然后就可以用test.ding.com 來訪問此服務(wù)了蹈胡。
[圖片上傳失敗...(image-42b32-1549951819452)]
- https訪問
(1) 創(chuàng)建證書
openssl genrsa -out tls.key 2048
[圖片上傳失敗...(image-d94477-1549951819452)]
(2) 然后把證書裝成secret
kubectl create secret tls ding-ingress-secret --cert=tls.crt --key=tls.key
[圖片上傳失敗...(image-ec71ad-1549951819452)]
在ingress-myapp.yaml中加入剛剛添加的secret,修改后的文件如下
[圖片上傳失敗...(image-4c9b69-1549951819452)]
然后就可以通過https訪問了