• k8s 之service资源介绍(三)


    kubernetes service资源

    apiVersion: v1
    kind: Service
    metadata:
        name: kubia
    spec:
        ports:
        - port: 80
           targetPort: 8080
        selector:
           app: kubia
    kubectl get svc
     
    kubectl exec kubia-id -- curl -s http://service_ip
    双横缸代表着kubectl 命令项的结束,下面的是容器内部执行的命令
    apiVersion: v1
    kind: Service
    metadata:
        name: kubia
    spec:
        sessionAffinity: ClientIP
    sessionAffinity属性默认为None,ClientIP 是保证特定客户端产生的请求每次都指向同一个pod
    apiVersion: v1
    kind: Service
    metadata:
        name: kubia
    spec:
        ports:
        - name: http
           port: 80
           targetPort: 8080
        - name: https
           port: 443
           target: 8443
        selector:
           app: kubia
    标签选择器应用于整个服务,不能对每个端口做单独的配置
     
    上面是采用端口号进行映射,还有一种方式给端口命名,这样在做映射的时候直接指向名称。好处是pod的端口随便改,而不用改service的配置如下:
    kind: Pod
    metadata:
       name: kubia
    spec:
       containers:
       - name: kubia
          ports:
              - name: http
                 containerPort: 8080
              - name: https
                 containerPort: 8443
    
    apiVersion: v1
    kind: Service
    spec:
        ports:
        - name: http
           port: 80
           targetPort: http
        - name: https
           port: 443
           targetPort: https
         selector:
             app: kubia
    kubectl delete po --all 删除所有pod ,而不管pod的id
    kubectl delete all --all all代表所有资源,--all代表所有资源对象
     
    backend-database.default.svc.cluster.local
    backend-database 服务名称
    default 命名空间
    svc.cluaster.local是在所有集群本地服务名称中使用的可配置集群域后缀
     
     
    kubectl exec -ti kubia-3inly bash 运行bash很像 docker exec -ti id bash
    不要ping kubernetes中创建的服务名称,这是因为服务的ip是一个虚拟的IP,只有在与服务端口结合时才有意义
     
     
    endpoint资源
    kubernetes service不仅可以暴露pod给外部,同样也可以把外部服务创建为服务让内部pod进行访问。服务并不是和pod直接相连的,有一种资源-endpoint介于两者之间。
    endpoint资源就是暴露一个服务的IP地址和端口的列表,endpoint资源和其他kubernetes资源一样,所以可以使用kubectl info 来获取它的基本信息
    kubectl describe svc kubia 执行此命令能看到endpoint资源
    kubectl get endpoints kubia
    我知道在创建service时定义了selector pod选择器,但在重定向传入连接时不会直接使用它。
    选择器用于构建IP和端口列表,然后存储在EndPoint资源中。当客户端连接到服务时,服务代理选择这些IP和端口对中的一个,并将传入连接重定向到该位置监听的服务器。
     
    EndPoint是一个单独的资源,而不是service的属性,所以我们可以单独的创建endpoint资源对象。
    我们在创建service时不声明pod选择器就不会创建endpoint
    apiVersion: v1
    kind: Service
    metadata:
        name: external-service 
    spec:
        ports:
        - port: 80
    这里并没有定义selector
    下面我们手动创建endpoint
    apiVersion: v1
    kind: Endpoints
    metadata:
        name: external-service   这里的名称一定和service的一致
    subsets:
    -   addresses:
        - ip: 1.1.1.1
        - ip: 2.2.2.2
    ports:
    -   port: 80 这里的port是endpoint的目标端口,是service中的targetPort
    以上就做了一个将外部服务通过service让内部pod可以访问。
     
    还有一种简单的方式,给外部服务创建一个别名服务。
    apiVersion: v1
    kind: Service
    matedata:
        name: external-service
    spec:
        type: ExternalName     代码的type被设置成ExternalName
        externalName:  someapi.somecompany.com 实际服务的完全限定名
        ports:
          - port: 80
    内部就可以使用external-service来访问服务了
     
     
    kubectl get po --all-namespaces 非常好用

  • 相关阅读:
    @终极解密输入网址按回车到底发生了什么
    jgitflow-maven-plugin报错:The authenticity of host can't be established.
    java log4j2日志行号不显示问题
    Prometheus监控之grafana常用模板编号记录
    DM数据守护
    使用IntelliJ IDEA 配置Maven(入门)
    IntelliJ IDEA lombok插件的安装和使用
    idea svn连接https报错问题: E230001: Server SSL certificate verification failed: certificate issued
    SVN安装后,右键不显示SVN菜单项
    IntelliJ IDEA怎么配置svn,集成svn方法
  • 原文地址:https://www.cnblogs.com/zhming26/p/11719499.html
Copyright © 2020-2023  润新知