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. JVM学习--(一)基本原理
  2. redux 入门到实践
  3. Process management of windows
  4. poj3648 2-sat 输出任意一组解
  5. 区块链培训资料(特别是以太坊)
  6. 深入浅出JSONP--解决ajax跨域问题
  7. LDAP命令介绍---dsconfig
  8. mysql的 case用法_Mysql casewhen的三种用法
  9. 文件过大 不能导入U盘怎么办
  10. ntp版本导致时间同步不成功问题
  11. (88)信号发生器实现方法?三角波、方波、锯齿波,正弦波
  12. 二维码的原理竟如此简单,第一次有人说的这么明白
  13. HBuilder开发旅游类APP(三) ----- 给APP添加底部导航栏(底部选项卡)
  14. session的概念
  15. ftp协议c语言实现-linux平台
  16. Linux下对MySQL数据库的操作
  17. 对象数组排序,利用jquery
  18. zblog host php,ZblogPHP幻灯片调用代码
  19. 读Densely Connected Pyramid Dehazing Network
  20. Python学习第一天~Python优点、运行、变量类型及存储、对象类型、数据类型

热门文章

  1. rational rose使用资料教程汇总
  2. Fragment ——第四步 传值
  3. 【报告分享】6.7-6.13两大消费赛道抖音、快手直播带货周报-果集数据(附下载)
  4. 地质灾害监测预警解决方案 远程测控终端RTU
  5. QT-通用TCP客户端使用工具
  6. 第一季度贡献奖励分配结果与评级 | IOST合伙人计划
  7. 15、DOM常见的操作方式
  8. 2023最新SSM计算机毕业设计选题大全(附源码+LW)之java网上蛋糕销售软件9h34h
  9. Python__定义和使用类
  10. android 数组获取指定字符串位置,android – 如何从这个json对象中提取字符串数组?...