k8s的服务资源文件配置详解

  • 注:本文章只作配置项解释,请灵活运用
---  #Service
kind: Service
apiVersion: v1 
metadata: 
  name: service 
  namespace: dev
spec: 
  selector: # 标签选择器,用于确定当前service代理哪些pod,仅适用于ClusterIP、NodePort和LoadBalancer类型。如果类型为ExternalName,则忽略。
    app: nginx
  type: [ExternalName,ClusterIP,NodePort,LoadBalancer] # Service类型,指定service的访问方式,默认ClusterIP
  clusterIP: string # 虚拟服务的ip地址,默认空(随机分配),仅适用于ClusterIP、NodePort和LoadBalancer类型
  sessionAffinity: [ClientIP,None] # session亲和性,支持ClientIP、None两个选项
  sessionAffinityConfig: # session亲和性设置
    clientIP: # clientIP包含基于客户端IP的会话关联的配置
      timeoutSeconds: number # 指定ClientIP类型会话粘性时间的秒数,如果ServiceAffinity==ClientIP,则该值必须大于0&<=86400(1天)。默认值为10800(3小时)。
  ports: # 端口信息
    - protocol: TCP 
      port: 3017  # service端口
      targetPort: 5003 # pod端口
      nodePort: 31122 # 主机端口
  
  externalIPs: string  # 是一个IP地址列表,集群中的节点也将为此服务接受流量
  externalName: string  # 作为此服务的CNAME记录返回的外部引用
  externalTrafficPolicy: string  #表示此服务是否希望将外部流量路由到节点本地或群集范围的端点。
                                 #"Local"保留客户端源IP并避免LoadBalancer和Nodeport类型服务的第二跳,但存在潜在的不平衡流量传播风险。
                                 #"Cluster"会使客户端源IP变得模糊,并可能导致到另一个节点的第二个跃点,但总体负载分布应良好。
  healthCheckNodePort: number #指定服务的healthcheck nodePort。如果未指定,则HealthCheckNodePort由服务api后端使用分配的nodePort创建。如果客户端指定,将使用用户指定的nodePort值。仅当类型设置为LoadBalancer且ExternalTrafficPolicy设置为Local时有效。
  ipFamily: [IPv4,IPv6] # 指定在启用IPv6DualStack功能时,此服务是否优先选择特定IP系列,如果不指定,默认为集群的主IP系列,对于ExternalName服务,ipFamily没有任何意义
  loadBalancerIP: string  # 仅适用于服务类型LoadBalancer,并使用此字段中指定的IP创建,若云提供商不支持该功能则忽略
  loadBalancerSourceRanges: string # 限制通过云提供商的流量负载平衡器将限制到指定的客户端IP。若云提供商不支持该功能则忽略
  PublishNotReadyAddresss: boolean # 表示处理此服务端点的任何代理都应忽略就绪/未就绪的任何指示
  topologyKeys: string # 是拓扑键的优先顺序列表,服务实现应使用该列表在访问此服务时优先排序端点,不能与externalTrafficPolicy=Local同时使用。
---  #Ingress
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-https
  namespace: dev
spec:
  tls: #TLS配置。仅支持单个TLS端口443。如果此列表中的多个成员指定了不同的主机,则如果实现入口的入口控制器支持SNI,则它们将根据通过SNI TLS扩展指定的主机名在同一端口上多路传输。
    - hosts: #TLS证书中包含的主机列表。此列表中的值必须与tlsSecret中使用的名称匹配。默认为完成此入口的loadbalancer控制器的通配符主机设置(如果未指定)
      - nginx.itheima.com
      - tomcat.itheima.com
      secretName: tls-secret # 指定秘钥
  rules: #配置入口的主机规则列表。如果未指定,或没有规则匹配,则所有流量都将发送到默认后端
  - host: nginx.itheima.com
    #网络主机的完全限定域名。注:1.不允许使用IP;2.不使用“:”分隔符。端口隐式地:80表示http,443表示https。
    #主机可以是精确的域名(例如“foo.bar.com”)或“*”以单个通配符标签为前缀的域名(例如“*.foo.com”)。且通配符“*”必须作为第一个DNS标签单独出现,并且仅与单个标签匹配。不能单独使用通配符标签(例如主机=“*”)。
    #请求将通过以下方式与主机字段匹配:
    #1.如果主机是精确的,则如果http主机头等于主机,则请求与此规则匹配。2.如果主机是通配符,则如果http主机头等于通配符规则的后缀(删除第一个标签),则请求与此规则匹配。
    http:
      paths: #将请求映射到后端的路径集合。
      - path: /  #路径与传入请求的路径匹配。路径必须以“/”开头。未指定时,将匹配传入请求的所有路径。
        backend: #后端定义将流量转发到的引用服务端点。
          serviceName: nginx-service  #引用的服务的名称
          servicePort: 80  #引用服务的端口
          resource:  #Ingress对象命名空间中另一个Kubernetes资源的ObjectRef。如果指定了资源,则不能指定serviceName和servicePort。
            apiGroup: string  #所引用资源的组。如果未指定APIGOUP,则指定的种类必须在核心API组中。对于任何其他第三方类型,都需要APIGroup。
            kind: string  #被引用的资源的类型
            name: string  #被引用的资源的名称
        pathType: [Exact,Prefix]  #可选,Exact精确匹配,Prefix基于由“/”分割的URL路径前缀进行匹配
  - host: tomcat.itheima.com
    http:
      paths:
      - path: /
        backend:
          serviceName: tomcat-service
          servicePort: 8080
  backend:  #可选,默认后端能够为不符合任何规则的请求提供服务。必须至少指定一个“后端”或“规则”
    resource:  #Ingress对象命名空间中另一个Kubernetes资源的ObjectRef。如果指定了资源,则不能指定serviceName和servicePort
      apiGroup: string  #引用资源的组。若未指定,则指定的种类必须在核心API组中
      kind: string  #被引用的资源的类型
      name: string  #被引用的资源的名称
    serviceName: string  #指定引用的服务的名称。
    servicePort: string  #指定引用服务的端口
  ingressClassName: string  #IngressClass群集资源的名称
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐