文档首页 > > API参考> Kubernetes API> Service> 创建Service

创建Service

分享
更新时间:2020/07/14 GMT+08:00

功能介绍

该API用于创建一个Service对象。

  • 如果在创建Service资源对象和Deployment资源对象后,要在CCE界面,工作负载详情页面中,“访问方式”页签下显示对应的Service资源,则需要给创建的Service资源对象添加labels标签,并且设置对应的selector。

    设置请求消息体中的“metadata.labels”参数键值如下:

    labels:
        app: appname

    设置请求消息体中的“spec.selector”参数键值如下:

    selector:
        app: appname 

    其中:
    • labels参数下“app”参数所键入的“appname”为显示在CCE工作负载界面上的工作负载名称,其值与Deployment的“metadata.labels”中所添加的内容一致。
    • selector参数下“app”的值与需要关联的Deployment的“spec.selector”保持一致。

URI

POST /api/v1/namespaces/{namespace}/services

表1 描述该API的参数。

表1 参数描述

参数

是否必选

描述

pretty

No

If 'true', then the output is pretty printed.

namespace

Yes

Name and auth scope, such as for teams and projects.

请求消息

请求参数:

请求参数如表2所示。

表2 参数描述

参数

是否必选

参数类型

描述

kind

Yes

String

Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase.

The value of this parameter is Service.

apiVersion

Yes

String

APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values.

The value of this parameter is v1.

metadata

Yes

metadata object

-

spec

Yes

spec object

-

status

No

status object

-

表3 metadata字段数据结构说明

参数

是否必选

参数类型

描述

name

Yes

String

Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated.

Value length: 4 character ≤ String length ≤ 63 characters

The string must comply with regular expression: ^[a-z]([-a-z0-9]*[a-z0-9])?$.

clusterName

No

String

The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.

initializers

No

initializers object

An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects. When an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.

generateName

No

String

GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.

If this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).

Applied only if Name is not specified.

Value length: 4 character ≤ String length ≤ 63 characters

The string must comply with regular expression: ^[a-z]([-a-z0-9]*[a-z0-9])?$.

namespace

No

String

Namespace defines the space within each name must be unique. An empty namespace is equivalent to the "default" namespace, but "default" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty. Must be a DNS_LABEL. Cannot be updated.

Value length: 0 character < String length ≤ 63 characters.

The string must comply with regular expression [a-z0-9]([-a-z0-9]*[a-z0-9])?.

selfLink

No

String

SelfLink is a URL representing this object. Populated by the system. Read-only.

说明:

This parameter is automatically generated. Do not assign values to this parameter. Otherwise, the API fails to be called.

uid

No

String

UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations. Populated by the system. Read-only.

说明:

This parameter is automatically generated. Do not assign values to this parameter. Otherwise, the API fails to be called.

resourceVersion

No

String

An opaque value that represents the internal version of this object that can be used by clients to determine when objects have changed. May be used for optimistic concurrency, change detection, and the watch operation on a resource or set of resources. Clients must treat these values as opaque and passed unmodified back to the server. They may only be valid for a particular resource or set of resources. Populated by the system. Read-only. Value must be treated as opaque by clients.

说明:

This parameter is automatically generated. Do not assign values to this parameter. Otherwise, the API fails to be called.

generation

No

Integer

A sequence number representing a specific generation of the desired state. Currently only implemented by replication controllers. Populated by the system. Read-only.

creationTimestamp

No

String

CreationTimestamp is a timestamp representing the server time when this object was created. It is not guaranteed to be set in happens-before order across separate operations. Clients may not set this value. It is represented in RFC3339 form and is in UTC. Populated by the system. Read-only. Null for lists.

说明:

This parameter is automatically generated. Do not assign values to this parameter. Otherwise, the API fails to be called.

deletionTimestamp

No

String

DeletionTimestamp is RFC 3339 date and time at which this resource will be deleted. This field is set by the server when a graceful deletion is requested by the user, and is not directly settable by a client. The resource will be deleted (no longer visible from resource lists, and not reachable by name) after the time in this field. Once set, this value may not be unset or be set further into the future, although it may be shortened or the resource may be deleted prior to this time. For example, a user may request that a pod is deleted in 30 seconds. The Kubelet will react by sending a graceful termination signal to the containers in the pod. Once the resource is deleted in the API, the Kubelet will send a hard termination signal to the container. If not set, graceful deletion of the object has not been requested. Populated by the system when a graceful deletion is requested. Read-only.

deletionGracePeriodSeconds

No

Integer

Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.

labels

No

Object

Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services.

Annotations

No

Object

Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects.

ownerReferences

No

ownerReferences object

List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.

finalizers

No

Array of strings

Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.

表4 spec字段数据结构说明

参数

是否必选

参数类型

描述

ports

Yes

ports object

The list of ports that are exposed by this service.

selector

No

Object

This service will route traffic to pods having labels matching this selector. Label keys and values that must match in order to receive traffic for this service. If empty, all pods are selected, if not specified, endpoints must be manually specified.

clusterIP

No

String

ClusterIP is usually assigned by the master and is the IP address of the service. If specified, it will be allocated to the service if it is unused or else creation of the service will fail. Valid values are None, empty string (""), or a valid IP address. 'None' can be specified for a headless service when proxying is not required. Cannot be updated.

The value of this parameter is NONE or a valid IP address.

type

No

String

Type of exposed service. Must be ClusterIP, NodePort, or LoadBalancer. Defaults to ClusterIP.

The “LoadBalancer” value indicates that Elastic Load Balance (ELB) is in use. For details about how to use ELB with a cluster created by the CCE console, see section 集群中使用ELB的操作方法

externalIPs

No

Array of strings

externalIPs is a list of IP addresses for which nodes in the cluster will also accept traffic for this service. These IPs are not managed by Kubernetes. The user is responsible for ensuring that traffic arrives at a node with this IP. A common example is external load-balancers that are not part of the Kubernetes system. A previous form of this functionality exists as the deprecatedPublicIPs field. When using this field, callers should also clear the deprecatedPublicIPs field.

externalTrafficPolicy

No

String

externalTrafficPolicy denotes if this Service desires to route external traffic to node-local or cluster-wide endpoints. "Local" preserves the client source IP and avoids a second hop for LoadBalancer and Nodeport type services, but risks potentially imbalanced traffic spreading. "Cluster" obscures the client source IP and may cause a second hop to another node, but should have good overall load-spreading.

healthCheckNodePort

No

Integer

healthCheckNodePort specifies the healthcheck nodePort for the service. If not specified, HealthCheckNodePort is created by the service api backend with the allocated nodePort. Will use user-specified nodePort value if specified by the client. Only effects when Type is set to LoadBalancer and ExternalTrafficPolicy is set to Local.

externalName

No

String

externalName is the external reference that kubedns or equivalent will return as a CNAME record for this service. No proxying will be involved. Must be a valid DNS name and requires Type to be ExternalName.

sessionAffinity

No

String

Supports "ClientIP" and "None". Used to maintain session affinity. Enable client IP based session affinity. Must be ClientIP or None. Defaults to None.

This parameter can be set to:

  • ClientIP
  • None

loadBalancerIP

No

String

Only applies to Service Type: LoadBalancer LoadBalancer will get created with the IP specified in this field. This feature depends on whether the underlying cloud-provider supports specifying the loadBalancerIP when a load balancer is created. This field will be ignored if the cloud-provider does not support the feature.

loadBalancerSourceRanges

No

Array of strings

Optional: If specified and supported by the platform, this will restrict traffic through the cloud-provide.load-balancer will be restricted to the specified client IPs. This field will be ignored if the cloud-provider does not support the feature.".

publishNotReadyAddresses

No

Boolean

publishNotReadyAddresses, when set to true, indicates that DNS implementations must publish the notReadyAddresses of subsets for the Endpoints associated with the Service. The default value is false. The primary use case for setting this field is to use a StatefulSet's Headless Service to propagate SRV records for its Pods without respect to their readiness for purpose of peer discovery. This field will replace the service.alpha.kubernetes.io/tolerate-unready-endpoints when that annotation is deprecated and all clients have been converted to use this field.

sessionAffinityConfig

No

SessionAffinityConfig object

sessionAffinityConfig contains the configurations of session affinity.

表5 status字段数据结构说明

参数

是否必选

参数类型

描述

loadBalancer

No

loadBalancer object

-

表6 ownerReferences字段数据结构说明

参数

是否必选

参数类型

描述

apiVersion

No

String

API version of the referent.

blockOwnerDeletion

No

Boolean

If true, AND if the owner has the "foregroundDeletion" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs "delete" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned.

kind

No

String

Kind of the referent.

name

Yes

String

Name of the referent.

uid

No

String

UID of the referent.

controller

No

Boolean

If true, this reference points to the managing controller.

表7 ports字段数据结构说明

参数

是否必选

参数类型

描述

name

No

String

The name of this port within the service. This must be a DNS_LABEL. All ports within a ServiceSpec must have unique names. This maps to the 'Name' field in EndpointPort objects. Optional if only one ServicePort is defined on this service.

Value length: 0 character < String length ≤ 63 characters.

The string must comply with regular expression [a-z0-9]([-a-z0-9]*[a-z0-9])?.

protocol

No

String

The IP protocol for this port. Supports "TCP" and "UDP".

This parameter can be set to:

  • TCP
  • UDP

port

Yes

Integer

The port that will be exposed by this service.

Value range: (0,65535].

targetPort

No

Integer

Number or name of the port to access on the pods targeted by the service. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME. If this is a string, it will be looked up as a named port in the target Pod's container ports. If this is not specified, the value of Port is used (an identity map). Defaults to the service port.

Value range: (0,65535].

nodePort

No

Integer

The port on each node on which this service is exposed when type=NodePort or LoadBalancer. Usually assigned by the system. If specified, it will be allocated to the service if unused or else creation of the service will fail. Default is to auto-allocate a port if the ServiceType of this Service requires one.

Value range: [30000,32767].

表8 loadBalancer字段数据结构说明

参数

是否必选

参数类型

描述

ingress

No

ingress object

Ingress is a list containing ingress points for the load-balancer. Traffic intended for the service should be sent to these ingress points.

表9 ingress字段数据结构说明

参数

是否必选

参数类型

描述

ip

No

String

IP is set for load-balancer ingress points that are IP based.

hostname

No

String

Hostname is set for load-balancer ingress points that are DNS based.

表10 SessionAffinityConfig字段数据结构说明

参数

是否必选

参数类型

描述

clientIP

No

ClientIPConfig object

clientIP contains the configurations of Client IP based session affinity.

表11 ClientIPConfig字段数据结构说明

参数

是否必选

参数类型

描述

timeoutSeconds

No

Integer

timeoutSeconds specifies the seconds of ClientIP type session sticky time. The value must be >0 && <=86400(for 1 day) if ServiceAffinity == "ClientIP". Default value is 10800(for 3 hours).

请求示例:

{
    "kind":"Service",
    "apiVersion":"v1",
    "metadata":{
       "name":"service-test",
       "creationTimestamp":null,
       "labels":{
          "app":"cce"
       }
    },
    "spec":{
       "ports":[{
          "name":"http",
          "port":80,
          "targetPort":0
       }],
       "selector":{
       "app":"cce"
       },
       "clusterIP":"None"
   },
   "status":{
      "loadBalancer":{}
   }
}

响应消息

响应参数:

响应参数的详细描述请参见请求消息

响应示例:

{
   "kind":"Service",
   "apiVersion":"v1",
   "metadata":{
      "name":"service-test",
      "namespace":"default",
      "selfLink":"/api/v1/namespaces/default/services/service-test",
      "uid":"61c9aee7-29aa-11e7-896b-fa163ebe5340",
      "resourceVersion":"1349201",
      "creationTimestamp":"2017-04-25T11:29:01Z",
      "labels":{
         "app":"cce"     
      }
   },
   "spec":{
      "ports":[{
         "name":"http",
         "protocol":"TCP",
         "port":80,
         "targetPort":80
      }],
      "selector":{"app":"cce"},
      "clusterIP":"None",
      "type":"ClusterIP",
      "sessionAffinity":"None"
   },
   "status":{
      "loadBalancer":{}
   }
}

状态码

表12描述API的状态码。

表12 状态码

状态码

描述

201

The request has been fulfilled, resulting in the creation of a new resource.

异常状态码请参见状态码

分享:

    相关文档

    相关产品

文档是否有解决您的问题?

提交成功!非常感谢您的反馈,我们会继续努力做到更好!
反馈提交失败,请稍后再试!

*必选

请至少选择或填写一项反馈信息

字符长度不能超过200

提交反馈 取消

如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨

智能客服提问云社区提问