美文网首页
什么是service和服务发现

什么是service和服务发现

作者: 柠檬泡红茶 | 来源:发表于2020-06-19 21:27 被阅读0次

    什么是service

    通过创建service,可以为一组具有相同功能的容器应用提供一个统一的入口地址,并且将请求负载到后端的各个容器上。将多个提供同一中服务的容器

    # kubectl create -f webapp.yaml
    # kubectl get pods -l app=webapp -o yaml | grep podIP
    

    为了可以使客户端能够访问到多个pod实列,需要创建一个service来提供服务。查看新创建的service,会发现其中生成一个虚拟的IP,而端口号测试从pod中复制而来,通过“vip:port”即可以对服务进行访问。请求则会被自动负载到后端的pod上。

    # kubectl expose rc webapp
    # kebectl get svc    
    

    通过文件的创建也可以实现上述创建service,而文件中的端口也可以制定,但需要注意指定后端的端口,

    # kebectl create -f webapp-svc.yaml
    # kubectl get svc
    

    webapp-svc.yaml

    apiVersion:v1
    kind:Service
    metadata:
        name: webapp
    spec:
        ports: 
            - port: 8081
             targetPort: 8080
        selector:
            app: webapp
    
    

    多端口的service

    有时一个服务需要对外提供多个端口,k8s允许在service对象上定义多个端口

    apiVersion:v1
    kind:Service
    metadata:
        name: webapp
    spec:
        ports: 
            - name: http
              protocol: TCP
              port: 80
              targetPort: 9999
            - name: https
              protocol: TCP
              port: 443
              targetPort: 9998
        selector:
            app: webapp
    
    
    注意:端口名称只能包含 小写字母数字字符 和 `-`。 端口名称还必须以字母数字字符开头和结尾。
    

    外部服务的service

    在一些环境中,需要将数据库作为后端服务进行连接,或者将另一个集群中的服务作为服务的后端,这时可以通过创建一个无lable selector的service来实现,即创建的service无法选择后端的pod,系统不会自动创建endpoint,需要手动创建一个和该service同名的endpoint,用来指向实际的后端地址。

    apiVersion:v1
    kind:Service
    metadata:
        name: myland
    spec:
        ports: 
            - protocol: TCP 
              port: 80
              targetPort: 80
    
    ====================
    endpoint配置文件
    ====================
    
    apiVersion:v1
    kind: Endpoints
    metadata:
        name: myland
    subsets:
    - addresses: 
      - IP: 200.200.200.201 
      ports:
      - port: 80
    
    
    图:Service指向外部服务

    服务发现

    两种基本的服务发现模式:环境变量和DNS

    环境变量

    当pod运行在Node,kubelet为每一个活跃的service添加环境变量。

    例如:一个名为“webapp-master”的service暴露TCP端口:8888,同时分配一个集群IP为10.0.0.101,其环境变量如下:

    WEBAPP_MASTER_SERVICE_HOST=10.0.0.101
    WEBAPP_MASTER_SERVICE_PORT=8888
    WEBAPP_MASTER_PORT=tcp://10.0.0.101:8888
    WEBAPP_MASTER_PORT_8888_TCP=tcp://10.0.0.101:8888
    WEBAPP_MASTER_PORT_8888_TCP_PROTO=tcp
    WEBAPP_MASTER_PORT_8888_TCP_PORT=8888
    WEBAPP_MASTER_PORT_8888_TCP_ADDR=10.0.0.101
    

    DNS

    可以使用组件为k8s集群设置DNS服务。支持集群的DNS服务器监视k8s API的新服务,并为每个服务创建一组DNS记录。如果集群中都启用了DNS,则所有的pod都可以通过其DNS名称自动解析。k8s 还支持命名端口的 DNS SRV(服务)记录。k8s DNS 服务器是唯一的一种能够访问 ExternalName 类型的 Service 的方式。

    相关文章

      网友评论

          本文标题:什么是service和服务发现

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