一、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将集群外部流量引入集群内的更多相关文章

  1. Kubernetes的三种外部访问方式:NodePort、LoadBalancer和Ingress(转发)

    原文 http://cloud.51cto.com/art/201804/570386.htm Kubernetes的三种外部访问方式:NodePort.LoadBalancer和Ingress 最近 ...

  2. Kubernetes的三种外部访问方式:NodePort、LoadBalancer和Ingress

    NodePort,LoadBalancer和Ingress之间的区别.它们都是将集群外部流量导入到集群内的方式,只是实现方式不同. ClusterIP ClusterIP服务是Kubernetes的默 ...

  3. 【Kubernetes】K8s笔记(十一):Ingress 集群进出流量总管

    目录 0. Ingress 解决了什么问题 1. Ingress Controller 2. 指定 Ingress Class 使用多个 Ingress Controller 3. 使用 YAML 描 ...

  4. 容器服务kubernetes federation v2实践五:多集群流量调度

    概述 在federation v2多集群环境中,通过前面几篇文章的介绍,我们可以很容易的进行服务多集群部署,考虑到业务部署和容灾需要,我们通常需要调整服务在各个集群的流量分布.本文下面简单介绍如何在阿 ...

  5. kubernetes (一)使用Rancher搭建集群

    目录 如何快速高效部署K8s集群 Rancher是什么 为什么是Rancher 1.0.安装Rancher 1.1.环境 1.2.选择Rancher版本 1.3.拉取镜像 2.0.容器启动高级选项 2 ...

  6. Kubernetes集群搭建之Etcd集群配置篇

    介绍 etcd 是一个分布式一致性k-v存储系统,可用于服务注册发现与共享配置,具有以下优点. 简单 : 相比于晦涩难懂的paxos算法,etcd基于相对简单且易实现的raft算法实现一致性,并通过g ...

  7. Kubernetes使用集群联邦实现多集群管理

    Kubernetes在1.3版本之后,增加了“集群联邦”Federation的功能.这个功能使企业能够快速有效的.低成本的跨区跨域.甚至在不同的云平台上运行集群.这个功能可以按照地理位置创建一个复制机 ...

  8. Kubernetes v1.12/v1.13 二进制部署集群(HTTPS+RBAC)

    官方提供的几种Kubernetes部署方式 minikube Minikube是一个工具,可以在本地快速运行一个单点的Kubernetes,尝试Kubernetes或日常开发的用户使用.不能用于生产环 ...

  9. MapReduce Service更换集群外部时钟源,仅需10步

    摘要:MapReduce Service 集群使用NTP进行时钟同步.本文简要介绍了MapReduce Service集群NTP机制及NTP的配置方式. 本文分享自华为云社区<MapReduce ...

随机推荐

  1. c# ServiceStack web 搭建

    用的是4.5的.net版本 构建model /// <summary> /// 通过id获取资料 /// </summary> //[Route("/GetStude ...

  2. No database provider has been configured for this DbContext

    var context = ((IInfrastructure<IServiceProvider>)set).GetService<DbContext>(); 在EF Core ...

  3. 梯度直方图(HOG,Histogram of Gradient)

    1.介绍 HOG(Histogram of Oriented Gradient)是2005年CVPR会议上,法国国家计算机科学及自动控制研究所的Dalal等人提出的一种解决人体目标检测的图像描述子,该 ...

  4. 垃圾分类常见APP

    垃圾分类指南app 上海就要实行垃圾分类了,垃圾分类指南app你需要吗,这里有相关的各种垃圾分类的介绍与上海垃圾分类投放指南,这里是垃圾分类指南手机入口能够让你更好的去完成垃圾分类呢.垃圾分类指 .. ...

  5. 许愿墙JQ

    <!doctype html> <html> <head>     <meta charset="utf-8">     <t ...

  6. 【51nod2026】Gcd and Lcm(杜教筛)

    题目传送门:51nod 我们可以先观察一下这个$f(x)=\sum_{d|x}\mu(d) \cdot d$. 首先它是个积性函数,并且$f(p^k)=1-p \ (k>0)$,这说明函数$f( ...

  7. 修改一张MyISAM表row_format为fixed为InnoDB表报错处理

    最近优化GTID模式下事务表和非事务表更新报错处理时,发现某几张表更改存储引擎为InnoDB报错如下: mysql> alter table sc_xxx_video_xxxxengine = ...

  8. 在线p图网址

    在线P图网址 如果你是简易的P图,不用那么麻烦的去下载安装Photoshop,可以使用以下网址在线编辑 https://www.uupoop.com/ps/?hmsr=ps_menu

  9. java—多线程—notify/notifyAll

    notify应该使用在,只有两个线程在调用类中的两个方法,并在两个方法中进行互斥操作? 博客:Java多线程学习之wait.notify/notifyAll 详解 未完待续……

  10. 自定义ViewGroup基础巩固2---onMeasure()学习及综合实现圆形菜单

    上次对自定义ViewGroup中的onLayout()方法进行了基础巩固[http://www.cnblogs.com/webor2006/p/7507284.html],对于熟知自定义ViewGro ...