美文网首页
《每天5分钟玩转 Kubernetes》6 Service

《每天5分钟玩转 Kubernetes》6 Service

作者: SlowGO | 来源:发表于2018-12-12 17:51 被阅读5次

Service 的作用

每个 pod 都有一个自己的IP,pod 崩溃后会有新的 pod 代替它,但 IP 就变了,这个 pod 对外提供服务,IP 的变化就对调用端产生了影响,解决方法就是使用 service。

service 逻辑上代表了一组 pod,具有相同 label 的 pod 就是一组,service 有自己的 ip,是不变的,客户端只需要访问 service 的 ip,kubernetes 负责维护 service 和 pod 的映射关系,无论 pod 如何变化,service 不变,对客户端没有影响。

创建 service

先创建 deployment(httpd.yml):

apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: httpd
spec:
  replicas: 3
  template:
    metadata:
      labels:
        run: httpd
    spec:
      containers:
        - name: httpd
          image: httpd
          ports:
            - containerPort: 80  

启动:

kubectl apply -f httpd.yml

查看 pod:

kubectl get pod -o wide
NAME                                   READY   STATUS      RESTARTS   AGE     IP           
httpd-8c6c4bd9b-kqxsk                  1/1     Running     0          86s     10.1.1.184
httpd-8c6c4bd9b-whkzq                  1/1     Running     0          86s     10.1.1.185
httpd-8c6c4bd9b-xfgr9                  1/1     Running     0          86s     10.1.1.183
...

启动了3个 pod,每个都有自己的 ip,可以通过各个 pod 的 ip 访问服务:

curl 10.1.1.184

<html><body><h1>It works!</h1></body></html>

创建 service(httpd-svc.yml):

apiVersion: v1
kind: Service
metadata:
  name: httpd-svc
spec:
  selector:
    run: httpd
  ports:
    - protocol: TCP
      port: 8080
      targetPort: 80  

启动:

kubectl apply -f httpd-svc.yml

查看 service :

kubectl get service

NAME                  TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
httpd-svc             ClusterIP   10.152.183.3    <none>        8080/TCP         22s

service 的 ip 是 10.152.183.3,端口是 8080,访问:

curl 10.152.183.3:8080

<html><body><h1>It works!</h1></body></html>

可以访问到后面的 pod。

DNS 访问 service

kubernetes 中的 kube-dns 组件是一个 DNS 服务器,每当有新的 service 创建时,kube-dns 会添加 dns 记录,cluster 中的 pod 可以通过 <service_name>.<namespace_name> 访问 service。

例如:

kubectl run busybox --rm -ti --image=busybox /bin/sh

/ # wget httpd-svc:8080
Connecting to httpd-svc:8080 (10.152.183.174:8080)
index.html           100% |*******************************|    45  0:00:00 ETA

使用了一个临时的 pod 验证了 DNS 特性,说明在一个 pod 中可以通过 service name 访问 service。

相关文章

网友评论

      本文标题:《每天5分钟玩转 Kubernetes》6 Service

      本文链接:https://www.haomeiwen.com/subject/ospphqtx.html