service

  • 一、简介
  • 二、开启kube-proxy的ipvs模式:
  • 三、创建service:(NodePort方式)
  • 四、指定一个 LoadBalancer 类型的 Service
    • 1.下载镜像
    • 2.上传镜像
    • 3.实现负载均衡
  • 五、service允许为其分配一个公有IP
  • 六、k8s网络通信,配置flannel
    • 模式修改为host-gw

一、简介

  • Service 是由 kube-proxy 组件,加上 iptables 来共同实现的.
    • kube-proxy 通过 iptables 处理 Service 的过程,需要在宿主机上设置相当多的
    iptables 规则,如果宿主机有大量的Pod,不断刷新iptables规则,会消耗大量的
    CPU资源。
    • IPVS模式的service,可以使K8s集群支持更多量级的Pod。

二、开启kube-proxy的ipvs模式:

[root@server4 pod]# kubectl -n kube-system get pod |grep proxy[root@server4 pod]# kubectl -n kube-system get pod -o wide |grep proxy[root@server4 pod]# kubectl -n kube-system get cm[root@server4 pod]# kubectl -n kube-system get cm kube-proxy[root@server4 pod]# kubectl edit cm kube-proxy -n kube-system
configmap/kube-proxy edited
[root@server4 pod]# kubectl get pod -n kube-system |grep kube-proxy | awk '{system("kubectl delete pod "$1" -n kube-system")}'
pod "kube-proxy-cmq2v" deleted
pod "kube-proxy-hqzkh" deleted
pod "kube-proxy-mjzh2" deleted
[root@server4 pod]# ip addr




三、创建service:(NodePort方式)

[root@server4 pod]# vim  svc.yaml   #创建service:(NodePort方式)
[root@server4 pod]# kubectl edit svc mysvc
service/mysvc edited
[root@server4 pod]# kubectl get svc
NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
demo         ClusterIP   10.97.29.222    <none>        80/TCP         23h
kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP        2d23h
mysvc        NodePort    10.100.22.177   <none>        80:31525/TCP   4m18s
[root@server4 pod]# netstat -antlp | grep 31525[root@server4 pod]# kubectl  run demo --image=busyboxplus -it
If you don't see a command prompt, try pressing enter.
/ # nslookup nginx-svc
Server:    10.96.0.10
Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local[root@server4 pod]# dig -t A nginx-svc.default.svc.cluster.local. @10.96.0.10



四、指定一个 LoadBalancer 类型的 Service

1.下载镜像

[root@foundation15 ~]# lftp 172.25.254.250
lftp 172.25.254.250:~> cd pub/docs/k8s/
cd ok, cwd=/pub/docs/k8s
lftp 172.25.254.250:/pub/docs/k8s> get metallb.yaml
8447 bytes transferred
lftp 172.25.254.250:/pub/docs/k8s> get metallb-v0.10.2.tar
90602496 bytes transferred
lftp 172.25.254.250:/pub/docs/k8s> exit
[root@foundation15 ~]# ls3.0.115            manifests                        rht-ks-post.logcompose            metallb-v0.10.2.tar              rht-ks-pre.logdaemon.json        metallb.yaml                     root@172.25.15.1get-docker.sh      Pictures                         root@172.25.15.4k8s-1.21.3.tar    'rhel6 lanmp.pdf'                 zabbix.apikube-flannel.yml   rhel-server-7.6-x86_64-dvd.iso
[root@foundation15 ~]# scp metallb-v0.10.2.tar metallb.yaml 172.25.15.4:
root@172.25.15.4's password:
metallb-v0.10.2.tar                                100%   86MB 106.3MB/s   00:00
metallb.yaml                                       100% 8447   374.5KB/s   00:00
[root@foundation15 ~]#

2.上传镜像

[root@server4 ~]# ls
kube-flannel.yml  metallb-v0.10.2.tar  metallb.yaml  pod
[root@server4 ~]# docker load -i metallb-v0.10.2.tar
b2d5eeeaba3a: Loading layer   5.88MB/5.88MB
a273cec6d851: Loading layer  40.54MB/40.54MB
Loaded image: reg.westos.org/metallb/controller:v0.10.2
b763436ff23f: Loading layer  44.15MB/44.15MB
Loaded image: reg.westos.org/metallb/speaker:v0.10.2
[root@server4 ~]# docker push reg.westos.org/metallb/speaker:v0.10.2
The push refers to repository [reg.westos.org/metallb/speaker]
b763436ff23f: Pushed
b2d5eeeaba3a: Pushed
v0.10.2: digest: sha256:b5e9cb99c22f8379238784b611bc3ddde18120f9a4b7481ea888ed9c72854222 size: 952
[root@server4 ~]# docker push reg.westos.org/metallb/controller:v0.10.2
The push refers to repository [reg.westos.org/metallb/controller]
a273cec6d851: Pushed
b2d5eeeaba3a: Mounted from metallb/speaker
v0.10.2: digest: sha256:1ed3d2bf860220557b0d862d0f4fc07ae84b33def79595489041186906e58e3d size: 952
[root@server4 ~]#

3.实现负载均衡

在service提交后,Kubernetes就会调用 CloudProvider 在公有云上为你创建一个负载均衡服务,并且把被代理的 Pod 的 IP地址配置给负载均衡服
务做后端。

[root@server4 metallb]# ls
configmap.yaml  lb-svc.yaml  metallb.yaml
[root@server4 metallb]# kubectl apply -f lb-svc.yaml
service/lb-svc unchanged
[root@server4 metallb]# kubectl apply -f configmap.yaml
configmap/config unchanged
[root@server4 metallb]# kubectl apply -f metallb.yaml [root@server4 metallb]# kubectl apply -f lb-svc.yaml
service/lb-svc unchanged
[root@server4 metallb]# kubectl get svc
NAME         TYPE           CLUSTER-IP     EXTERNAL-IP    PORT(S)        AGE
demo         ClusterIP      10.97.29.222   <none>         80/TCP         24h
kubernetes   ClusterIP      10.96.0.1      <none>         443/TCP        3d
lb-svc       LoadBalancer   10.103.125.6   172.25.15.10   80:32421/TCP   5m20s
[root@server4 metallb]# [root@foundation15 ~]# curl 172.25.15.10
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
[root@foundation15 ~]# curl 172.25.15.10/hostname.html
replicaset-example-j4lt7
[root@foundation15 ~]# curl 172.25.15.10/hostname.html
replicaset-example-9hbdm



五、service允许为其分配一个公有IP

[root@server4 metallb]# ls
configmap.yaml  lb-svc.yaml  metallb.yaml
[root@server4 metallb]# vim ext-ip.yaml
[root@server4 metallb]# cat ext-ip.yaml
apiVersion: v1
kind: Service
metadata:name: ex-service
spec:selector:app: myappports:- name: httpprotocol: TCPport: 80targetPort: 80externalIPs:- 172.25.15.100
[root@server4 metallb]# kubectl apply -f ext-ip.yaml
service/ex-service created
[root@server4 metallb]# kubectl get svc

  • 一种全局的、为了代理不同后端 Service 而设置的负载均衡服务,就是 Kubernetes 里的Ingress 服务。
  • • Ingress由两部分组成:Ingress controller和Ingress服务。
  • • Ingress Controller 会根据你定义的 Ingress 对象,提供对应的代理能力。业界常用的各种反向代理项目,比如 Nginx、HAProxy、Envoy、Traefik 等,都已经为Kubernetes专门维护了对应的 Ingress Controller。
[root@server4 metallb]# vim ex-svc.yaml
apiVersion: v1
kind: Service
metadata:name: my-service
spec:type: ExternalNameexternalName: www.westos.org[root@server4 metallb]# kubectl apply -f ex-svc.yaml
service/my-service created
[root@server4 metallb]# kubectl get svc
NAME         TYPE           CLUSTER-IP     EXTERNAL-IP      PORT(S)        AGE
demo         ClusterIP      10.97.29.222   <none>           80/TCP         26h
ex-service   ClusterIP      10.110.22.46   172.25.15.100    80/TCP         93m
kubernetes   ClusterIP      10.96.0.1      <none>           443/TCP        3d2h
lb-svc       LoadBalancer   10.103.125.6   172.25.15.10     80:32421/TCP   129m
my-service   ExternalName   <none>         www.westos.org   <none>         4s
[root@server4 metallb]# kubectl edit svc my-service
service/my-service edited
[root@server4 metallb]# kubectl get svc
NAME         TYPE           CLUSTER-IP     EXTERNAL-IP     PORT(S)        AGE
demo         ClusterIP      10.97.29.222   <none>          80/TCP         27h
ex-service   ClusterIP      10.110.22.46   172.25.15.100   80/TCP         94m
kubernetes   ClusterIP      10.96.0.1      <none>          443/TCP        3d2h
lb-svc       LoadBalancer   10.103.125.6   172.25.15.10    80:32421/TCP   129m
my-service   ExternalName   <none>         www.baidu.com   <none>         39s
[root@server4 metallb]# dig -t A my-service.default.svc.cluster.local. @10.96.0.10


六、k8s网络通信,配置flannel

flannel支持多种后端:
Vxlan
vxlan           //报文封装,默认
Directrouting       //直接路由,跨网段使用vxlan,同网段使用host-gw模式。
host-gw:     //主机网关,性能好,但只能在二层网络中,不支持跨网络,                如果有成千上万的Pod,容易产生广播风暴,不推荐
UDP:         //性能差,不推荐
[root@server4 ~]# cd pod
[root@server4 pod]# ls
cronjob.yaml     headless.yaml  job.yaml  pod.yaml  svc.yaml
deployment.yaml  init.yaml      perl.tar  rs.yaml
[root@server4 pod]# kubectl apply  -f deployment.yaml
deployment.apps/nginx-deployment created

模式修改为host-gw

[root@server4 ~]# kubectl -n kube-system  get pod
[root@server4 ~]# kubectl -n kube-system edit cm kube-flannel-cfgnet-conf.json: |{"Network": "10.244.0.0/16","Backend": {"Type": "host-gw"       #模式修改}}[root@server4 ~]# kubectl -n kube-system get pod[root@server4 ~]# kubectl get pod -n kube-system |grep kube-flannel | awk '{system("kubectl delete pod "$1" -n kube-system")}'
[root@server4 ~]# kubectl get pod -o wide
[root@server4 ~]# route -n
[root@server2 ~]# route -n
[root@server3 ~]# route -n






21.Kubernetes(三)-----集群部署(service)相关推荐

  1. Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录

    0.目录 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.感谢 在此感谢.net ...

  2. Kubernetes二进制集群部署+Web管理界面+kubectl 命令管理+YAML文件详解(集合)

    Kubernetes---- 二进制集群部署(ETCD集群+Flannel网络) Kubernetes----单节点部署 Kubernetes----双master节点二进制部署 Kubernetes ...

  3. Kubernetes(k8s)集群部署七、k8s网络通信+service扩展ingress(TLS,认证,地址重写)calico网络插件(允许指定pod访问服务,禁止其他namespace访问服务)

    k8s网络通信 k8s网络通信 1.容器间通信 2.pod之间的通信 2.1同一节点的pod 2.2不同节点的pod之间的通信 flannel网络原理 flannel支持多种后端: 3.pod和ser ...

  4. Centos7 安装部署Kubernetes(k8s)集群过程

    1.系统环境 服务器版本 docker软件版本 CPU架构 CentOS Linux release 7.9 Docker version 20.10.12 x86_64 2.前言 如下图描述了软件部 ...

  5. 自动化运维之k8s——Kubernetes集群部署、pod、service微服务、kubernetes网络通信

    目录 一.Kubernetes简介 1.Kubernetes简介 2.kubernetes设计架构 3.Kubernetes核心组件 4.kubernetes设计结构 二.Kubernetes部署 1 ...

  6. ASP.NET Core应用程序容器化、持续集成与Kubernetes集群部署(三

    在上文ASP.NET Core应用程序容器化.持续集成与Kubernetes集群部署(二)中,我介绍了如何使用Azure DevOps为ASP.NET Core应用程序案例:tasklist搭建持续集 ...

  7. 二进制安装kubernetes v1.11.2 (第十章 kube-scheduler集群部署)

    继续前一章的部署. 十.kube-scheduler集群部署 该集群包含2个节点,启动后通过竞争选举机制产生一个leader节点,其他节点为阻塞状态.当leader节点不可用后,剩余的节点将再次进行选 ...

  8. K8S 学习笔记三 核心技术 Helm nfs prometheus grafana 高可用集群部署 容器部署流程

    K8S 学习笔记三 核心技术 2.13 Helm 2.13.1 Helm 引入 2.13.2 使用 Helm 可以解决哪些问题 2.13.3 Helm 概述 2.13.4 Helm 的 3 个重要概念 ...

  9. Kubernetes 二进制方式集群部署(单节点多节点)

    目录 一.K8S 单 Master 节点二进制部署 1. 环境部署 2. 部署 etcd 集群 2.1 创建 k8s 工作目录 2.2 编写 etcd-cert.sh 和 etcd.sh 脚本 2.3 ...

  10. Kubernetes单节点部署----二进制集群部署(ETCD集群+Flannel网络)

    文章目录 环境部署 开局优化 master节点操作etcd 集群部署 开始制作证书 node节点加入ETCD集群(实现内部通信) node1/2节点操作 docker安装 flannel网络配置 ma ...

最新文章

  1. 通过java.util.concurrent写多线程程序
  2. 【Java 语言】Java 多线程 一 ( 线程基础 : 线程启动 | 线程停止 | 线程暂停 | 线程优先级 | 守护线程)
  3. Python文件格式 .py .pyc .pyw .pyo .pyd的主要区别
  4. Git-将已有的项目转换为GIT项目托管到 GITHUB 仓库
  5. layui table工具栏点击时间_layui table表格上添加日期控件laydate
  6. client中周期性边界_FLUENT创建周期性边界条件方法
  7. java打字游戏代码_牛逼啊!一个随时随地写Python代码的神器
  8. 计算三角形面积(信息学奥赛一本通-T1034)
  9. SpringBoot启动o.s.b.d.LoggingFailure… 错误解决方法
  10. Unity3D游戏开发之换装系统的实现
  11. 基于echarts的数据可视化模板[开箱即用]
  12. python 华泰股票交易接口_TradeApi 自带资金管理的A股程序化交易接口
  13. 可以装虚拟机的云服务器,云服务器可以装虚拟机吗
  14. 在线客服功能介绍-了解常见在线客服系统的功能点
  15. 谷粒商城-商城业务(商品上架)
  16. leetcode 每天10道travl
  17. 美国旅游签证办理流程
  18. HDLBits练习(三)多路复用器,算术电路,卡诺图电路
  19. 制作Java视频播放器
  20. 《黄金瞳》 台词:你人真好!

热门文章

  1. 苹果CMS Mxone Pro开源版无加密v7.2
  2. Spring 的getBeanNamesForType和getBean联合使用
  3. 【那些年,我们一起追的女孩】第十七章
  4. segfault rip rsp error
  5. 34、基于51单片机锂电池电压电流容量检测仪表LCD液晶显示 原理图PCB程序设计
  6. 基于APK加速启动时间的Android系统资源优化
  7. 小明酱的暑期求职纪【version 2.0】
  8. 如何在 R 中绘制 Beta 分布
  9. Python 如何让自己的代码更有逼格 pythonic
  10. Debezium报错处理系列之三十八:Timeout expired while fetching topic metadata