Chinaunix首页 | 论坛 | 博客
  • 博客访问: 343375
  • 博文数量: 52
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 577
  • 用 户 组: 普通用户
  • 注册时间: 2013-04-27 14:21
个人简介

知道自己该干嘛,知道自己能干嘛

文章分类

全部博文(52)

文章存档

2019年(1)

2018年(8)

2017年(2)

2016年(11)

2015年(3)

2014年(10)

2013年(17)

我的朋友

分类: 系统运维

2017-01-04 16:22:58



         今天来介绍一下 kubernetes ingress, 什么是kubernetes ingress, 简单来说 "就是一个可以暴露内部服务的一个7层的loadblance"
                 
             
  1.                 ingress 工作组件以及相应功能
             
                 
  1.           
  2.                ingress Controller: watch ApiSverver /ingress ep updates to th Ingress resource ,内置一个nginx,反向代理ingress内的服务。
  3.                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:
                     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

                NAME                                READY     STATUS    RESTARTS   AGE
                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

               
               step 3 test
               [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

               OK, 我们今天学习 ingress的目的达到了,设置的ingress生效了。

                                                                                                Cail_wepiao
 

               参考链接: 
                         









阅读(2700) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~