kubernetes
  • Introduction
  • 安装
    • 组件端口
    • 二进制安装
    • Kubeadm
      • 安装单Master集群
      • 安装高可用集群(手动分发证书)
      • 安装高可用集群(自动上传证书)
      • 安装ETCD集群
      • 安装高可用集群(外部ETCD)
    • 启动参数解析
      • ETCD相关参数
  • 负载均衡
    • Service
    • Ingress
    • 安装MetalLB
    • Nginx-ingress-controller
      • 转发TCP与UDP服务
      • 启动参数
      • 自定义Nginx模板
  • 存储
    • Volume
    • PV与PVC
    • StorageClass
    • Local-PV
      • Static-Provisioner
    • 实践
      • Ceph-RBD
      • NFS
  • 有状态服务
    • Mysql实践
    • Operator
      • Etcd
      • Zookeeper
      • Mysql
  • 认证与授权
    • 认证
      • 实践
    • 授权
  • Helm
    • 安装
    • Chart
      • 依赖
    • Helm命令
    • Repository
  • 日志
  • 监控
    • Prometheus体系
      • Prometheus
        • 内置函数
        • 配置
          • 规则文件
        • PromQL
      • Exporter
        • Metrics
      • Grafana
        • 配置
      • AlertManager
        • 配置
    • 容器监控
      • Cadvisor的指标
      • k8s中部署Prom与Cadvisor
  • Istio
  • 资源预留
    • imagefs与nodefs
    • 总结
  • 集群联邦
    • 联邦DNS原理
    • 联邦DNS安装
    • 安装federation-v1
  • Other
    • ImagePullSecret
    • QOS
    • Apiserver的代理
    • 资源配额
Powered by GitBook
On this page
  • 集群内如何访问一个微服务
  • Service

Was this helpful?

负载均衡

集群内如何访问一个微服务

当我们使用kubernetes发布我们的微服务后(deployment对象),那么在其他的容器中,我们要怎样去访问这个微服务呢?

假设我们发布了一个服务(deployment),名字叫web1,它提供8080端口的服务,yaml文件如下:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: web1
spec:
  selector:
    matchLabels:
      app: web1
  replicas: 3
  template:
    metadata:
      labels:
        app: web1
    spec:
      containers:
      - name: web1
        image: xxxx:latest
        ports:
        - containerPort: 8080
          protocol: TCP

此时,我们再创建一个同名的Service对象,那么我们便可以在其他的容器中通过curl web1:8080的方式来访问该微服务,如果是其他命名空间的Pod,则可以通过curl web1.default:8080来访问该微服务

apiVersion: v1
kind: Service
metadata:
  name: web1
spec:
  selector:
    app: web1
  ports:
  - name: default
    protocol: TCP
    port: 8080
    targetPort: 8080

Service

为什么我们创建了一个与deployment同名的service对象,就可以通过web1:8080来访问这个微服务了呢?这个微服务发布了三个实例(Pod),那么这三个Pod之间是如何实现负载均衡的呢?

我们先来回答最后一个问题,这三个Pod之间是如何实现负载均衡的。

每创建一个Service对象,k8s便会自动生成一个同名的Endpoints对象。我们创建了如上的Service对象后,通过kubectl get ep web1可以看到看到该Service对应的Endpoints

$ kubectl get ep web1
NAME      ENDPOINTS                                                  AGE
web1      172.26.93.201:8080,172.26.93.202:8080,172.26.93.203:8080   8s
PreviousETCD相关参数NextService

Last updated 5 years ago

Was this helpful?