今天来介绍一下 kubernetes ingress, 什么是kubernetes ingress, 简单来说 "就是一个可以暴露内部服务的一个7层的loadblance"
-
<li "="" style="word-wrap: break-word; margin-bottom: 0px; margin-left: 0px; padding-left: 10px; list-style: none outside none; font-size: 14px; background-image: initial; background-attachment: initial; background-size: initial; background-origin: initial; background-clip: initial; background-position: initial; background-repeat: initial;"> ingress 工作组件以及相应功能
-
<li "="" style="word-wrap: break-word; margin-bottom: 0px; margin-left: 0px; padding-left: 10px; list-style: none outside none; font-size: 14px; background-image: initial; background-attachment: initial; background-size: initial; background-origin: initial; background-clip: initial; background-position: initial; background-repeat: initial;"> <li "="" style="word-wrap: break-word; margin-bottom: 0px; margin-left: 0px; padding-left: 10px; list-style: none outside none; font-size: 14px; background-image: initial; background-attachment: initial; background-size: initial; background-origin: initial; background-clip: initial; background-position: initial; background-repeat: initial;"> ingress Controller: watch ApiSverver /ingress ep updates to th Ingress resource ,内置一个nginx,反向代理ingress内的服务。
- ingress : 描述访问的rules,与后端svc之间的关系。
工作流程: ingress Controller 监听 apiSverve ingress 当发现又新的 ingress,基于你定义的 go text/template重写一份 nginx配置文件,重启nginx。
部署一个完整的 kubernetes ingress
step 1 deploy ingress Controller
[root@kuber-master-141 ingress]# cat nginx-ctl.yaml
apiVersion: v1
kind: Service
metadata:
name: default-http-backend
labels:
k8s-app: default-http-backend
spec:
ports:
- port: 80
targetPort: 8080
protocol: TCP
name: http
selector:
k8s-app: default-http-backend
---
apiVersion: v1
kind: ReplicationController
metadata:
name: default-http-backend
spec:
replicas: 1
selector:
k8s-app: default-http-backend
template:
metadata:
labels:
k8s-app: default-http-backend
spec:
terminationGracePeriodSeconds: 60
containers:
- name: default-http-backend
# Any image is permissable as long as:
# 1. It serves a 404 page at /
# 2. It serves 200 on a /healthz endpoint
image: registry.wepiao.com/defaultbackend:1.2
imagePullPolicy: IfNotPresent
livenessProbe:
httpGet:
path: /healthz
port: 8080
scheme: HTTP
initialDelaySeconds: 30
timeoutSeconds: 5
ports:
- containerPort: 8080
resources:
limits:
cpu: 10m
memory: 20Mi
requests:
cpu: 10m
memory: 20Mi
---
apiVersion: v1
kind: ReplicationController
metadata:
name: nginx-ingress-controller
labels:
k8s-app: nginx-ingress-lb
spec:
replicas: 1
selector:
k8s-app: nginx-ingress-lb
template:
metadata:
labels:
k8s-app: nginx-ingress-lb
name: nginx-ingress-lb
spec:
terminationGracePeriodSeconds: 60
containers:
- image: registry.wepiao.com/nginx-ingress-controller:0.8.3
imagePullPolicy: IfNotPresent
name: nginx-ingress-lb
#imagePullPolicy: Always
readinessProbe:
httpGet:
path: /healthz
port: 10254
scheme: HTTP
livenessProbe:
httpGet:
path: /healthz
port: 10254
scheme: HTTP
initialDelaySeconds: 10
timeoutSeconds: 1
# use downward API
env:
- name: POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: KUBERNETES_MASTER
value: http://10.3.1.141:8080
ports:
- containerPort: 80
hostPort: 80
- containerPort: 443
hostPort: 443
# we expose 18080 to access nginx stats in url /nginx-status
# this is optional
- containerPort: 18080
hostPort: 18080
args:
- /nginx-ingress-controller
- --default-backend-service=$(POD_NAMESPACE)/default-http-backend
step 2 创建2个nginx svc
apiVersion: v1
kind: ReplicationController
metadata:
name: kubea-nginx-rc
spec:
replicas: 1
template:
metadata:
labels:
project: kubea-nginx
spec:
containers:
- name: kubea-nginx
image: docker.io/nginx
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
---
kind: Service
apiVersion: v1
metadata:
labels:
project: kubea-nginx
name: kubea-nginx-svc
namespace: default
spec:
type: ClusterIP
ports:
- port: 80
targetPort: 80
selector:
project: kubea-nginx
apiVersion: v1
kind: ReplicationController
metadata:
name: kubeb-nginx-rc
spec:
replicas: 1
template:
metadata:
labels:
project: kubeb-nginx
spec:
containers:
- name: kubeb-nginx
image: docker.io/nginx
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
---
kind: Service
apiVersion: v1
metadata:
labels:
project: kubeb-nginx
name: kubeb-nginx-svc
namespace: default
spec:
type: ClusterIP
ports:
- port: 80
targetPort: 80
selector:
project: kubeb-nginx
[root@kuber-master-141 msite]# kubectl get,svc
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
default-http-backend 20.254.192.115 80/TCP 7d
kubea-nginx-svc 20.254.67.68 80/TCP 1d
kubeb-nginx-svc 20.254.123.19 80/TCP 1d
kubernetes 20.254.0.1 443/TCP 48d
po/busybox 1/1 Running 981 40d
po/default-http-backend-03m2a 1/1 Running 0 7d
po/kubea-nginx-rc-cfye5 1/1 Running 0 1d
po/kubeb-nginx-rc-ia64v 1/1 Running 0 1d
po/nginx-ingress-controller-t6qwp 1/1 Running 0 7d
再pod创建2个文件来区分服务,创建的过程我就不在赘述了
[root@kuber-master-141 msite]# kubectl exec kubea-nginx-rc-cfye5 -- cat /usr/share/nginx/html/kubea.html
kubea
[root@kuber-master-141 msite]# kubectl exec kubeb-nginx-rc-ia64v -- cat /usr/share/nginx/html/kubeb.html
kubeb
step 3 我们建立2个ingress
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: kubea
spec:
rules:
- host: kubea.wepiao.com
http:
paths:
- path: /
backend:
serviceName: kubea-nginx-svc
servicePort: 80
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: kubeb
spec:
rules:
- host: kubeb.wepiao.com
http:
paths:
- path: /
backend:
serviceName: kubeb-nginx-svc
servicePort: 80
[root@kuber-master-141 ~]# kubectl get ing
NAME HOSTS ADDRESS PORTS AGE
kubea kubea.wepiao.com 10.3.1.60 80 2d
kubeb kubeb.wepiao.com 10.3.1.60 80 2d
[root@VM_1_234_centos ~]# curl --resolve kubea.wepiao.com:80:10.3.1.60 kubea.wepiao.com/kubea.html
kubea
[root@VM_1_234_centos ~]# curl --resolve kubeb.wepiao.com:80:10.3.1.60 kubeb.wepiao.com/kubeb.html
kubeb
Cail_wepiao
参考链接: https://github.com/kubernetes/contrib/tree/master/ingress/controllers
http://kubernetes.io/docs/user-guide/ingress/
http://blog.chinaunix.net/uid-28840446-id-5757743.html
http://blog.csdn.net/u013812710/article/details/52801656#概述
https://kubernetes.io/docs/user-guide/ingress/
https://github.com/nginxinc/kubernetes-ingress