《四》Service – 与外界连通、Ingress

Service – 与外界连通

介绍Service

  • 防止Pod失联
  • 定义一组Pod的访问策略
  • 支持ClusterIP,NodePort以及LoadBalancer三种类型
  • Service的底层实现主要有iptables和ipvs二种网络模式

Pod与Service的关系

  • ? 通过label-selector相关联
  • ? 通过Service实现Pod的负载均衡( TCP/UDP 4层)

说明:service 通过selector 关联到pod的labels 标签

定义service

查看pod的app信息

详细信息

Service 类型

  • ? ClusterIP:默认,分配一个集群内部可以访问的虚拟IP(VIP),不需要外部访问
  • ? NodePort:在每个Node上分配一个端口作为外部访问入口
  • ? LoadBalancer:工作在特定的Cloud Provider上,例如Google Cloud,AWS,OpenStack

NodePort

node上采用的是ipvs的工具(定义如下):

LoadBalancer
比如阿里云(slb)、aws的负载均衡器

总结:
NodePort:
用户 ===》域名===》负载均衡器(nginx、lvs)===>NodeIP:Port===> PodIP:Port

LoadBalancer(提供特定的云提供商LB的底层接口(slb,aws,openstack)):
用户 ===》域名===》负载均衡器(阿里云、aws,这一步是自动完成的,不需要手动的添加)===>NodeIP:Port===> PodIP:Port

固定node的端口:

创建一个pod分配到了一个node上,只要ENDPOINTS的方式,所有node都可以访问:

Service 代理模式

底层流量转发与负载均衡实现:
? Iptables 通过iptables 的规则匹配,有问题时就比较麻烦的处理,得清空 iptables -F
1、创建很多iptables规则(更新,非增量更新,因为iptables都是从上往下执行的,一条一条匹配)
2、以上带来的问题就是 若是规则越多,很难管理

? IPVS
1、只执行4层(阿里云SLB就是根据这个来做的)
2、ipvsadm -ln
3、设置策略(rr,wrr,lc,wlc,ip hash)

     ![](http://i2.51cto.com/images/blog/201812/17/bd4780b77b8c05bc565159751564f997.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)

        systemctl restart kube-proxy

DNS
内部通讯不可能根据ip来通信,因为ip不是固定的,为每一个Service创建DNS记录用于域名解析。

参考地址:https://github.com/kubernetes/kubernetes/tree/master/cluster/addons/dns/coredns

[[email protected] demo]# kubectl apply -f coredns.yaml

验证是否可以解析

如果解析不同的命名空间下的(在kube-system 解析default下的service):

Ingress
Pod与Ingress的关系如下:

通过label-selector相关联
通过Ingress Controller实现Pod的负载均衡,支持TCP/UDP 4层和HTTP 7层

Ingress Controller

部署文档:https://github.com/kubernetes/ingress-nginx/blob/master/docs/deploy/index.md

注意事项:
? 镜像地址修改成国内的:lizhenliang/nginx-ingress-controller:0.20.0
? 使用宿主机网络:hostNetwork: true

wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/mandatory.yaml

修改(这个源下载不了):

执行:
kubectl apply -f mandatory.yaml

验证:

若是失败,则查询:

以上Ingress Controller 创建完成,现在编辑Ingress 规则

查看文档:https://kubernetes.io/docs/concepts/services-networking/ingress/

[[email protected] ingress]# cat ingress1.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: simple-fanout-example
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - host: foo.bar.com
    http:
      paths:
      - path: /
        backend:
          serviceName: my-service
          servicePort: 802

多个域名访问:

查看控制器分配在了哪个node上,然后做域名绑定到这个node

编写hosts:

访问验证:http://foo.bar.com/

基于https访问
1、需要ca自签证书:

2、执行:bash certs.sh
生成以下两个文件:

3、创建密钥
[[email protected] ingress]# kubectl create secret tls sslexample-foo-com --cert=sslexample.foo.com.pem --key=sslexample

4、执行:
[[email protected] ingress]# kubectl apply -f httpsingress1.yaml

5、绑定域名访问:

https://sslexample.foo.com/

说明:如果secretName 写错了,k8s会自动颁发一个证书,颁发者就不是kubernetes

总结
Ingress
1、四层、七层负载均衡转发
2、支持自定义service访问策略
3、只支持基于域名的网站访问
4、执行TLS
5、需要部署多个Ingress Controller,避免一个挂了

原文地址:http://blog.51cto.com/jacksoner/2332022

时间: 2024-10-08 21:10:19

《四》Service – 与外界连通、Ingress的相关文章

第五章 Kubernetes进阶之Service与外界连通

1.Pod与Service的关系 Pod出现故障以后Deployment会根据策略重启Pod,但是重启Pod会生成新的IP,需要引入Service概念保证访问正常 Service 防止Pod失联 定义一组Pod访问策略 支持ClusterIP,NodePort以及LoadBanlancer三种类型 Service的底层主要有Iptables和IPVS两种网络模式 2.Service的定义 Pod与Service的关系 通过label-selector相关联 通过Service实现Pod的负载均衡

Android笔记三十四.Service综合实例二

综合实例2:client訪问远程Service服务 实现:通过一个button来获取远程Service的状态,并显示在两个文本框中. 思路:如果A应用须要与B应用进行通信,调用B应用中的getName().getAuthor()方法,B应用以Service方式向A应用提供服务.所以.我们能够将A应用看成是client,B应用为服务端,分别命名为AILDClient.AILDServer. 一.服务端应用程序 1.src/com.example.aildserver/song.aidl:AILD文

Android学习笔记二十四.Service入门(二)绑定本地Service并与之通信

绑定本地Service并与之通信    通过上一篇博文的前3步,我们就算完成了一个Service及使用该Service的应用程序(Service为该应用程序的组成部分).但当程序通过startService()和stopService()启动.关闭Service时,Service与访问者之间基本上不存在太多的关联,因此Service和访问者之间也无法进行通信.数据交换.如果我们希望开发的Service能与访问者之间实现方法调用或数据交换,我们可以让访问者使用bindService()和unbin

K8S集群使用Ingress实现网站入口动静分离实践

今年3月份在公司的内部k8s培训会上,和研发同事详细探讨了应用部署容器化部署的几个问题,问题简要如下: 1.java应用容器化部署首先通过自动化部署工具编译出全量的war包,将war包直接编译到docker镜像后推送到私用仓库并版本化控制:其次通过更新deployment的yaml文件来实现部署和后续的滚动更新,应用程序需要进行容器化改造. 这里的难点和工作量在于容器的镜像制作以及版本化管理,之后准备采用harbor做企业私有仓库. 2.dashborad面板的权限控制解决方案参考:http:/

K8s Ingress笔记

一 要理解一个概念,首先要明白它是干什么用的,然后再去理解它是怎么实现的.Ingress的作用就是提供一个集群外部访问集群内部的入口.那么它是怎么实现的呢,我们知道,集群内部的Cluster IP外部是无法直接访问到的,而在 K8s集群中,集群外部访问内部pod中的应用大概有以下几种形式: 1. 通过开启proxy模式访问Cluster IP.这种方式要求我们运行 kubectl 作为一个未认证的用户,因此我们不能用 这种方式把服务暴露到 internet 或者在生产环境使用. 2. 直接访问p

TF+K8s轻松上手丨通过Kubernetes Ingress进行高级外部应用程序连接

本文所有相关链接pdf:https://tungstenfabric.org.cn/assets/uploads/files/tf-ceg-case-2.pdf Kubernetes的Ingress文档页面将其描述为: "用于管理对集群中服务的外部访问的API对象,通常是HTTP.Ingress可以提供负载均衡.SSL终结和基于名称的虚拟主机." CNI不提供Ingress功能.这意味着Kubernetes集群管理者通常要为其集群安装.管理和支持单独的Ingress控制器解决方案. 对

12、kubernetes之ingress及Ingress Controller

一.概念 ClusterIP:例如svc所分配的ip地址 NodePort:k8s集群物理机机通信地址,client --> NodeIP:NodePort --> ClusterIP:ServicePort --> PodIP:containerPort No ClusterIP:Headless Service ,ServiceName --> PodIP Ingress:负责7层调度 二.ingress-nginx部署 # cat mandatory.yaml apiVers

Android 面试题总结之Android 基础(四)

Android 面试题总结之Android 基础Service(四) 在上一章节Android 面试题总结之Android 基础Broadcast Receiver(三) 我们讲了Broadcast Receiver基础知识.本节主要讲解Service相关基础知识,Service也是我们开发过程中经常使用到. 在阅读过程中有任何问题,请及时联系.如需转载请注明 fuchenxuan de Blog 本章系<Android 之美 从0到1 – 高手之路>Android基础Service 总结了A

kubernetes之Ingress部署

1,如何访问K8S中的服务: 1,Ingress介绍 Kubernetes 暴露服务的方式目前只有三种:LoadBlancer Service.NodePort Service.Ingress:前两种估计都应该很熟悉,下面详细的了解下这个 Ingress Ingress由两部分组成:Ingress Controller 和 Ingress 服务. Ingress Contronler 通过与 Kubernetes API 交互,动态的去感知集群中 Ingress 规则变化,然后读取它,按照自定义