kubernetes将集群外部流量引入集群内
一、service:pod是有生命周期的,我们想给客户一个固定的访问端点,在客户端与服务端之间启动一个固定的中间层,依赖于kubernetes的一个附件CoreDns。kubernetes有三类网路地址
1.node network 节点网路,实在存在的,配置在节点接口之上的
2.pod network pod网络,实在存在的,配置在pod资源之上的
3.cluster network 集群地址,虚拟地址,仅出现service的规则当中
service:有三种工作模式
userspace:用户空间,用户请求到达service以后,先把他转为本地监听在某个套接字上的用户空间的kube-proxy,由kube-proxy负责处理。kube-proxy处理完成以后再转给service ip 最终代理至这个service管理的各pod实现调度。效率很低,先到内核空间--->用户空间--->内核空间.是kube-proxy负责调度的
iptables:客户端ip请求时直接请求service ip,请求报文在本地内核空间的service规则截取,进而直接调度给相关的pod。由iptables规则直接负责调度。1.10-之前用
ipvs:客户端ip请求时直接请求service ip,请求报文在本地内核空间的service ipvs截取,进而直接调度给相关的pod。由ipvs规则直接负责调度。1.1.1+用的是ipvs
service的pod资源发生改变,例如标签选择器适用的pod增加。适用的信息会立即反映到api server中,kube-proxy watch到api server中的变化 ,立即转为ipvs的规则。动态实时转换
使用清单创建service资源:
获取service字段信息:kubectl explain service
type格式是clusterIP
- apiVersion: v1
- kind: Service
- metadata:
- name: redis
- namespace: default
- spec:
- selector:
- app: redis
- role: logstor
- clusterIP: 10.97.97.97
- type: ClusterIP
- ports:
- - port:
- targetPort:
type格式是nodeport,可以在集群外访问。通过访问每个节点的ip:nodeport
- apiVersion: v1
- kind: Service
- metadata:
- name: myapp
- namespace: default
- spec:
- selector:
- app: myapp
- release: canary
- clusterIP: 10.98.98.98 #如果将clusterIP设置为None就是无头的service,没有ip地址,但是可以通过名称myapp.defalut.svc.cluster.local.进行访问
sessionAffinity: ClientIP- type: NodePort
- ports:
- - port:
- targetPort:
- nodePort: 30080
红色字体表示设置选择session保持
二、ingress Controller + service(仅用于对pod的分类,service关联的有几个pod,就是upstream后端pod) 实现
ingress基于service分类,识别出有几个pod和pod信息。并且把pod的信息(ip地址)生成配置信息,注入到ingress Controller
k8s还有yi一种引入集群外部流量的方式ingress,ingress资源是一种七层调度器,他利用一种七层pod来实现将外部流量引入到内部来。事实上他也脱离不了service的工作。 作为ingress 用于基于七层调度时,我们必须要用pod中的运行的七层服务功能的mirror调度。可用的解决方案nginx,haproxy等。
nginx
Traefik
Envooy(适用于微服务)
ingress的定义 kubectl explain ingress
安装ingress可以参照 https://github.com/kubernetes/ingress-nginx/blob/master/docs/deploy/index.md
用ingress-nginx代理到后端tomcat
定义后端tomcat的deployment和service
- apiVersion: v1
- kind: Service
- metadata:
- name: tomcat
- namespace: default
- spec:
- selector:
- app: tomcat
- release: canary
- ports:
- - name: http
- port:
- targetPort:
- - name: ajp
- port:
- targetPort:
- ---
- apiVersion: apps/v1
- kind: Deployment
- metadata:
- name: tomcat-deploy
- namespace: default
- spec:
- replicas:
- selector:
- matchLabels:
- app: tomcat
- release: canary
- strategy:
- rollingUpdate:
- maxSurge:
- maxUnavailable:
- template:
- metadata:
- labels:
- app: tomcat
- release: canary
- spec:
- containers:
- - name: tomcat-container
- image: tomcat:8.5.-jre8-alpine
- imagePullPolicy: IfNotPresent
- ports:
- - name: http
- containerPort:
- - name: ajp
- containerPort:
vim ingress-tomcat.yaml
- apiVersion: extensions/v1beta1
- kind: Ingress
- metadata:
- name: ingress-tomcat
- namespace: default
- annotations:
- kubernetes.io/ingress.clall: "nginx"
- spec:
- rules:
- - host: tomcat.yiruiduan.com
- http:
- paths:
- - path: /tomcat
- backend:
- serviceName: tomcat
- servicePort:
红色部分是想对应的,只有在同一个namespace才能找到后端的tomcat。ingress是通过service确定哪些是他的后端服务器的所以serviceName要和后端的service名称相同
注:根据url路径代理,后端的tomcat必须存在真是的path路径。即tomcat的pod中/usr/local/tomcat/webapps的目录下有tomcat路径,否则会返回404
构建https服务
创建secret对象 kubectl create secret tls tomcat-ingress-secret --cert=tls.crt --key=tls.key
查看secret对象 kubectl get secret
- apiVersion: extensions/v1beta1
- kind: Ingress
- metadata:
- name: ingress-tomcat-tls
- namespace: default
- annotations:
- kubernetes.io/ingress.clall: "nginx"
- spec:
- tls:
- - hosts:
- - tomcat.yiruiduan.com
- secretName: tomcat-ingress-secret
- rules:
- - host: tomcat.yiruiduan.com
- http:
- paths:
- - path: /tomcat
- backend:
- serviceName: tomcat
- servicePort:
- - path:
- backend:
- serviceName: tomcat
- servicePort:
访问测试:https://tomcat.yiruiduan.com:80443
kubernetes将集群外部流量引入集群内的更多相关文章
- Kubernetes的三种外部访问方式:NodePort、LoadBalancer和Ingress(转发)
原文 http://cloud.51cto.com/art/201804/570386.htm Kubernetes的三种外部访问方式:NodePort.LoadBalancer和Ingress 最近 ...
- Kubernetes的三种外部访问方式:NodePort、LoadBalancer和Ingress
NodePort,LoadBalancer和Ingress之间的区别.它们都是将集群外部流量导入到集群内的方式,只是实现方式不同. ClusterIP ClusterIP服务是Kubernetes的默 ...
- 【Kubernetes】K8s笔记(十一):Ingress 集群进出流量总管
目录 0. Ingress 解决了什么问题 1. Ingress Controller 2. 指定 Ingress Class 使用多个 Ingress Controller 3. 使用 YAML 描 ...
- 容器服务kubernetes federation v2实践五:多集群流量调度
概述 在federation v2多集群环境中,通过前面几篇文章的介绍,我们可以很容易的进行服务多集群部署,考虑到业务部署和容灾需要,我们通常需要调整服务在各个集群的流量分布.本文下面简单介绍如何在阿 ...
- kubernetes (一)使用Rancher搭建集群
目录 如何快速高效部署K8s集群 Rancher是什么 为什么是Rancher 1.0.安装Rancher 1.1.环境 1.2.选择Rancher版本 1.3.拉取镜像 2.0.容器启动高级选项 2 ...
- Kubernetes集群搭建之Etcd集群配置篇
介绍 etcd 是一个分布式一致性k-v存储系统,可用于服务注册发现与共享配置,具有以下优点. 简单 : 相比于晦涩难懂的paxos算法,etcd基于相对简单且易实现的raft算法实现一致性,并通过g ...
- Kubernetes使用集群联邦实现多集群管理
Kubernetes在1.3版本之后,增加了“集群联邦”Federation的功能.这个功能使企业能够快速有效的.低成本的跨区跨域.甚至在不同的云平台上运行集群.这个功能可以按照地理位置创建一个复制机 ...
- Kubernetes v1.12/v1.13 二进制部署集群(HTTPS+RBAC)
官方提供的几种Kubernetes部署方式 minikube Minikube是一个工具,可以在本地快速运行一个单点的Kubernetes,尝试Kubernetes或日常开发的用户使用.不能用于生产环 ...
- MapReduce Service更换集群外部时钟源,仅需10步
摘要:MapReduce Service 集群使用NTP进行时钟同步.本文简要介绍了MapReduce Service集群NTP机制及NTP的配置方式. 本文分享自华为云社区<MapReduce ...
随机推荐
- 第十一章 ZYNQ-MIZ702 DDR3 PS读写操作方案
本编文章的目的主要用简明的方法在纯PS里对DDR3进行读写. 本文所使用的开发板是Miz702 PC 开发环境版本:Vivado 2015.4 Xilinx SDK 2015.4 11.0本章难度 ...
- 怎样获取xhr的当前状态
一个XMLHttpRequets实例从创建到发起请求再到获取数据, 期间会有一些中间状态, 这些状态是必要的, 我们可以通过判断这些状态值来进行不同的动作. xhr中获取请求状态的属性是: xhr.r ...
- Mybatis 多个参数传入的多种方法
ist<XXXBean> getXXXBeanList(HashMap map); <select id="getXXXBeanList" parameterTy ...
- HTTP协议探究(四):TCP和TLS优化
一 复习与目标 1 复习 简单密码学.对称加密与非对称加密 数字签名.数字证书 SSL/TLS HTTPS = HTTP + SSL/TLS,SSL/TLS为HTTP提供了保密性.完整性和鉴别性 2 ...
- C语言快速判断素数——不超时
这属于算法上的问题,好好考虑一下算法,还要考虑一下素数的定义. 素数是只有1和本身能整除的整数.所以在求素数的时候,要将素数与1到素数本身中间的所有整数都相除,看是否有整除的数,如果有,那肯定不是素数 ...
- go语言入门(8)异常处理
1,error接口 Go语言引入了一个关于错误处理的标准模式,即error接口,它是Go语言内建的接口类型,该接口的定义如下: type error interface { Error() strin ...
- QTP10破解步骤(亲试有效)
QTP10破解步骤: 1.安装qtp,一路默认下来(一定要默认安装目录),一直到要求输入License的界面 2.拷贝mgn-mqt82.exe到C:\Program Files\Mercury In ...
- Shell脚本相关
cat /proc/17616/cmdline 17616代表进程号 用这个可以完整打印出当前的进程的全名 当前shell的进程号.你可以使用ps -A 看你自己shell 的pid.是内置变量. $ ...
- Tomcat - Tomcat安装
Tomcat官网:http://tomcat.apache.org/ 准备:JAVA环境布置完成 一.Windows平台 1. 版本选择 1) 进入官网 2) 查看版本匹配 官网说明 https:// ...
- 团队项目-Beta版本发布
这个作业属于哪个课程 课程链接 这个作业要求在哪里 作业要求链接 团队名称 众志陈成 这个作业的目标 通过团队协作了解软件开发的大致流程,并在这个过程中体会调整与优化程序的方法,为以后真实的软件开发奠 ...