Kubernetes Service Manifest: Difference between revisions

From NovaOrdis Knowledge Base
Jump to navigation Jump to search
 
(24 intermediate revisions by the same user not shown)
Line 16: Line 16:
     size: large
     size: large
  [[Kubernetes_Manifests#spec|spec]]:
  [[Kubernetes_Manifests#spec|spec]]:
   [[#type|type]]: ClusterIP
   [[#type|type]]: ClusterIP|NodePort|LoadBalancer|ExternalName
   [[#selector|selector]]:
   [[#selector|selector]]:
     function: front-end # Label selector, the service is looking for
     function: front-end # Label selector, the service is looking for
                         # pods with the label "function=front-end"
                         # pods with the label "function=front-end"
   [[#ports|ports]]:
   [[#ports|ports]]:
   - port: 80
   - [[#port|port]]: 80           # Port exposed externally by the service
     targetPort: 8080
    [[#port_name|name]]: 'http'
     protocol: TP
     [[#targetPort|targetPort]]: 8080   # A container port   
    [[#nodePort|nodePort]]: 18080    # Only valid for NodePort services
     protocol: TCP
  [[#sessionAffinity|sessionAffinity]]: Node
  [[#publishNotReadyAddresses|publishNotReadyAddresses]]: false
  [[#externalTrafficPolicy|externalTrafficPolicy]]: ...


=.metadata Elements=
=.metadata Elements=
Line 32: Line 37:
==type==
==type==


Optional element. If not specified, it is assumed to be "[[Kubernetes Service Concepts#ClusterIP_Service|ClusterIP]]".
Optional element. If not specified, it is assumed to be "[[Kubernetes Service Concepts#ClusterIP_Service|ClusterIP]]". Other values: "[[Kubernetes_Service_Concepts#NodePort_Service|NodePort]]", "[[Kubernetes_Service_Concepts#LoadBalancer_Service|LoadBalancer]]", "[[Kubernetes_Service_Concepts#ExternalName_Service|ExternalName]]".
 
==selector==
==selector==


Line 42: Line 48:


===port===
===port===
The port exposed by the service externally. This is the port the service will be available on, and the value will be used by the external clients connecting to the service.
The port exposed by the service externally. This is the port the service will be available on, and the value will be used by the external clients connecting to the service. Also see: {{Internal|Kubernetes Service Concepts#Service_Port|Service Port}}
 
===targetPort===
===targetPort===
The port exposed by the pods associated with the service. The service will forward requests over connections opened with this port as target.
The port exposed by the pods associated with the service. The service will forward requests over connections opened with this port as target. The port can be specified using an integral value, but also using a name that was declared in the pod's manifest. For more details see: {{Internal|Kubernetes Service Concepts#Service_Target_Port|Service Target Port}}
 
===<span id='port_name'></span>name===
 
When more than one port is configured, each port must carry a name. See:{{Internal|Kubernetes_Service_Concepts#Port_Name|Port Name}}
 
===nodePort===
See: {{Internal|Kubernetes_Service_Concepts#NodePort_Service|NodePort Service}}
 
==sessionAffinity==
 
By default is "None". The only other possible option is "ClientIP". For more details see: {{Internal|Kubernetes Service Concepts#Session_Affinity|Kubernetes Service Concepts - Session Affinity}}


==publishNotReadyAddresses==
==publishNotReadyAddresses==
{{Internal|Kubernetes_Container_Probes#publishNotReadyAddress|Container Probes - publishNotReadyAddress}}
==externalTrafficPolicy==
See: {{Internal|Kubernetes_Service_Concepts#Node.2FPod_Relationship|Node/Pod Relationship for NodePort Services}}

Latest revision as of 00:22, 23 September 2020

External

Internal

Example

apiVersion: v1
kind: Service
metadata:
  name: blue
  labels:
    size: large
spec:
  type: ClusterIP|NodePort|LoadBalancer|ExternalName
  selector:
    function: front-end # Label selector, the service is looking for
                        # pods with the label "function=front-end"
  ports:
  - port: 80            # Port exposed externally by the service
    name: 'http'
    targetPort: 8080    # A container port    
    nodePort: 18080     # Only valid for NodePort services
    protocol: TCP
  sessionAffinity: Node
  publishNotReadyAddresses: false
  externalTrafficPolicy: ...

.metadata Elements

labels

The labels declared here apply to the service instance itself, they have no relationship to the target pods' labels, which are declared in the spec selector. Also see:

Manifest Metadata - labels

.spec Elements

type

Optional element. If not specified, it is assumed to be "ClusterIP". Other values: "NodePort", "LoadBalancer", "ExternalName".

selector

The service will select the pods to be exposed based on the labels specified in this selector. Also see:

Service Concepts - Associating a Service with Pods

ports

The element contains an array of ports that will exposed by the service. A port is specified by the following elements:

port

The port exposed by the service externally. This is the port the service will be available on, and the value will be used by the external clients connecting to the service. Also see:

Service Port

targetPort

The port exposed by the pods associated with the service. The service will forward requests over connections opened with this port as target. The port can be specified using an integral value, but also using a name that was declared in the pod's manifest. For more details see:

Service Target Port

name

When more than one port is configured, each port must carry a name. See:

Port Name

nodePort

See:

NodePort Service

sessionAffinity

By default is "None". The only other possible option is "ClientIP". For more details see:

Kubernetes Service Concepts - Session Affinity

publishNotReadyAddresses

Container Probes - publishNotReadyAddress

externalTrafficPolicy

See:

Node/Pod Relationship for NodePort Services