负载均衡
集群内如何访问一个微服务
当我们使用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: 8080Service
为什么我们创建了一个与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 8sLast updated
Was this helpful?