LOADING

Follow me

【转载】Kubernetes1.6 Ingress配置
五月 3, 2017|DockerPaaS

【转载】Kubernetes1.6 Ingress配置

【转载】Kubernetes1.6 Ingress配置

 1.      什么是Ingress

Ingress是一个Kubernetes资源,可让您为Kubernetes服务配置HTTP负载均衡器。这样的负载平衡器通常会将您的服务暴露给您的Kubernetes群集之外的客户端。Ingress资源支持:

  • 公开服务:

通过自定义URL(例如,URL处的服务AURL处的/serviceA服务B /serviceB)。

通过多个主机名(例如,foo.example.com一组服务和bar.example.com另一组)。

  • 为每个公开的主机名配置SSL终止。

通常,服务和pod可以由集群网络可路由IP。在边缘路由器处结束的所有流量都被丢弃或转发到其他地方。在概念上,这可能看起来像:

Kubernetes1.6 Ingress配置

Ingress是允许入站连接到达集群服务的规则集合。

Kubernetes1.6 Ingress配置

它可以配置为提供外部可访问的URL,负载均衡流量,终止SSL,基于名称的虚拟主机等。用户通过将Ingress资源发布到API服务器来请求进入。一个入口控制器负责履行入口,通常与负载均衡器,虽然它也可以配置您的边缘路由器或额外的前端,以帮助处理在HA方式的流量。

2.      什么是Ingress  controllers

Ingress控制器是通过Kubernetes API监视Ingress资源的应用程序,并在更改情况下更新负载均衡器的配置。不同的负载平衡器需要不同的Ingress控制器实现。通常,将Ingress控制器部署为群集中的pod。在软件负载均衡器(如NGINX)的情况下,将Ingress控制器与负载平衡器一起部署在pod中。

 

3.      Kubernetes中的角色访问控制机制(RBAC)支持

kubernetes1.6版本中最引入注意的是RBAC授权机制进入 Beta阶段,RBAC(基于角色的权限访问控制)是控制访问kubernetes资源的权限.RBAC允许灵活的配置授权策略,而不需要重启集群.本文重点描述RBAC机制带来的能力以及最佳实践.

  • 基础概念

需要理解 RBAC 一些基础的概念和思路,RBAC 是让用户能够访问 Kubernetes API 资源的授权方式。

Kubernetes1.6 Ingress配置

RBAC 中定义了两个对象,用于描述在用户和资源之间的连接权限。

  • 角色

角色是一系列的权限的集合,例如一个角色可以包含读取 Pod 的权限和列出 Pod 的权限, ClusterRole Role 类似,但是可以在集群中到处使用(Role namespace 一级的)。

  • 角色绑定

RoleBinding 把角色映射到用户,从而让这些用户继承角色在namespace 中的权限。ClusterRoleBinding 让用户继承 ClusterRole 在整个集群中的权限。

Kubernetes1.6 Ingress配置

RBAC 现在被Kubernetes 深度集成,并使用他给系统组件进行授权,可以使用以下命令查询:

#kubectl get clusterroles–namespace=kube-system

 

4.      配置keepalived-vip

为了使Ingress对外提供服务的域名绑定的IP高可用,需要在nginx-ingress所运行的服务上安装keepalive服务保证虚拟IP可以高可用运行。

登录k8s环境所有node节点上安装keepalved

#yum –y install keepalived

#systemctl enable keepalived

 

登录节点1,配置keepalived服务

#vi /etc/keepalived/keepalived.conf   添加以下内容

! Configuration File for keepalived

 

global_defs {

  notification_email {

     admin@example.com

   }

   notification_email_from  admin@example.com  设置邮件报警

  smtp_server IP         设置邮件服务器的IP

  smtp_connect_timeout 30

  router_id Ingress_M

}

 

vrrp_instance Ingress_10.72.243.144 {

   state Master        主节点

   interface ens160     网卡的名称

   virtual_router_id 8   同一局域网内ID不能相同

   priority 100

   advert_int 1

   smtp_alert

   authentication {

       auth_type PASS

       auth_pass 1111

    }

 

   virtual_ipaddress {

       虚拟IP地址

    }

}

登录其它节点(),配置keepalived服务

#vi /etc/keepalived/keepalived.conf   添加以下内容

! Configuration File for keepalived

 

global_defs {

  notification_email {

     admin@example.com

   }

  notification_email_from  admin@example.com  设置邮件报警

  smtp_server IP         设置邮件服务器的IP

  smtp_connect_timeout 30

  router_id Ingress_M

}

 

vrrp_instance Ingress_IP {

   state Backup        主节点

   interface ens160     网卡的名称

    virtual_router_id 8   同一局域网内ID不能相同

   priority 90        不同节点的优先级值不一样,防止脑裂,争抢资源

   advert_int 1

   smtp_alert

   authentication {

       auth_type PASS

       auth_pass 1111

    }

 

   virtual_ipaddress {

       虚拟IP地址

    }

}

 

配置完成后,分别登录各节点启动服务

#systemctl start keepalived

此时虚拟IP已经可以ping通,内网设置此虚拟IPDNS解析如下:

VIP>ingress.example.com

5.      配置Ingress

#vi nginx-ingress-rbac.yaml    添加以下内容

apiVersion:rbac.authorization.k8s.io/v1beta1

kind:ClusterRole

metadata:

  name: ingress

rules:

-apiGroups:

  – “”

  – “extensions”

  resources:

  – configmaps

  – secrets

  – services

  – endpoints

  – ingresses

  – nodes

  – pods

  verbs:

  – list

  – watch

-apiGroups:

  – “”

  – “extensions”

  resources:

  – ingresses

  – secrets

  verbs:

  – get

-apiGroups:

  – “”

  resources:

  – events

  – services

  verbs:

  – create

  – list

  – update

  – get

-apiGroups:

  – “extensions”

  resources:

  – ingresses/status

  – ingresses

  verbs:

  – update

apiVersion:rbac.authorization.k8s.io/v1beta1

kind:Role

metadata:

  name: ingress-ns

  namespace: default

rules:

-apiGroups:

  – “”

  resources:

  – pods

  verbs:

  – list

-apiGroups:

  – “”

  resources:

  – services

  verbs:

  – get

-apiGroups:

  – “”

  resources:

  – endpoints

  verbs:

  – get

  – create

  – update

apiVersion:rbac.authorization.k8s.io/v1beta1

kind:RoleBinding

metadata:

  name: ingress-ns-binding

  namespace: default

roleRef:

  apiGroup: rbac.authorization.k8s.io

  kind: Role

  name: ingress-ns

subjects:

  – kind: ServiceAccount

    name: ingress

    namespace: default

apiVersion:rbac.authorization.k8s.io/v1beta1

kind:ClusterRoleBinding

metadata:

  name: ingress-binding

roleRef:

  apiGroup: rbac.authorization.k8s.io

  kind: ClusterRole

  name: ingress

subjects:

  – kind: ServiceAccount

    name: ingress

    namespace: default

apiVersion:v1

kind:ServiceAccount

metadata:

  name: ingress

  namespace: default

#vi nginx-config.yaml    添加以下内容

kind:ConfigMap

apiVersion:v1

metadata:

  name: nginx-config

data:

  proxy-connect-timeout: “60s”

  proxy-read-timeout: “60s”

  client-max-body-size: “50m”         设置nginx最大可传输的文件限制

#vi nginx-ingress-daemonset.yaml    添加以下内容

apiVersion:extensions/v1beta1

kind:DaemonSet

metadata:

  name: nginx-ingress-controller

spec:

  template:

    metadata:

      labels:

        name: nginx-ingress

    spec:

      # nodeSelector:

      #  role: nginx-ingress

      hostNetwork: true

      serviceAccountName: ingress

      containers:

      – image: nginxdemos/nginx-ingress:0.8.1

        imagePullPolicy: Always

        name: nginx-ingress

        ports:

        – containerPort: 80

          hostPort: 80

        – containerPort: 443

          hostPort: 443

        # Uncomment the lines below to enableextensive logging and/or customization of

        # NGINX configuration with configmaps     自定义nginx,默认没开启

        args:

         – -v=3

         –nginx-configmaps=default/nginx-config

#vi ingress-example.yaml       添加以下内容

apiVersion:extensions/v1beta1

kind:Ingress

metadata:

  name: ingress

spec:

  rules:

  – host: ingress.example.com

    http:

      paths:

      – path: /tea

        backend:

          serviceName: tea-svc

          servicePort: 80

#vi tea.yaml    添加以下内容

apiVersion:v1

kind:Service

metadata:

  name: tea-svc

  labels:

    app: tea

spec:

  ports:

  – port: 80

    targetPort: 80

    protocol: TCP

    name: http

  selector:

app: tea

apiVersion:v1

kind:ReplicationController

metadata:

  name: tea-rc

spec:

  replicas: 3

  template:

    metadata:

      labels:

        app: tea

    spec:

      containers:

      – name: tea

        image: nginxdemos/hello

        ports:

        – containerPort: 80

依次生成相应的服务

#kubectl apply -f ./nginx-ingress-rbac.yaml

#kubectl apply -f./nginx-ingress-daemonset.yaml

#kubectl apply -f ./ingress-example.yaml

#kubectl apply -f ./tea.yaml

 

查看Ingress服务

#kubectl get ing

#kubectl describe ing ingress

6.      验证服务

访问http://ingress.example.com/tea出现以下测试页面

Kubernetes1.6 Ingress配置

7.      更新访问服务

添加一个coffee的服务配置文件参考tea

#kubectl apply -f ./coffee.yaml

#kubectl edit ing ingress

      – path: /tea

        backend:

          serviceName: tea-svc

          servicePort: 80

     – path: /coffee              添加

        backend:

          serviceName: coffee-svc

          servicePort: 80

 

#kubectl describe ing ingress  查看更新的配置

访问coffee服务http://ingress.example.com/coffee出现以下测试页面

Kubernetes1.6 Ingress配置

no comments
Share

发表评论