kubernetes ingress


         今天来介绍一下 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内的服务。
  1.                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
 
                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
 

               参考链接: 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

猜你喜欢

转载自m635674608.iteye.com/blog/2361520