服務
apiVersion: v1
import "k8s.io/api/core/v1"
服務
Service 是軟體服務(例如 mysql)的命名抽象,它由代理偵聽的本地埠(例如 3306)以及確定哪些 Pod 將響應透過代理傳送的請求的選擇器組成。
apiVersion: v1
kind: Service
metadata (ObjectMeta)
標準物件的元資料。更多資訊:https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
spec (ServiceSpec)
Spec 定義了服務的行為。https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
status (ServiceStatus)
最近觀察到的服務狀態。由系統填充。只讀。更多資訊:https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
ServiceSpec
ServiceSpec 描述了使用者在服務上建立的屬性。
selector (map[string]string)
將服務流量路由到標籤鍵和值與此選擇器匹配的 Pod。如果為空或不存在,則假定服務有一個管理其端點的外部程序,Kubernetes 不會修改。僅適用於 ClusterIP、NodePort 和 LoadBalancer 型別。如果型別為 ExternalName 則忽略。更多資訊:https://kubernetes.club.tw/docs/concepts/services-networking/service/
ports ([]ServicePort)
補丁策略:在鍵
port
上合併對映:合併時將保留鍵
port, protocol
上的唯一值此服務公開的埠列表。更多資訊:https://kubernetes.club.tw/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies
ports.port (int32),必需
此服務將公開的埠。
ports.targetPort (IntOrString)
服務目標 Pod 上要訪問的埠號或埠名稱。埠號必須在 1 到 65535 之間。埠名稱必須是 IANA_SVC_NAME。如果這是一個字串,它將作為目標 Pod 容器埠中的命名埠進行查詢。如果未指定,則使用“port”欄位的值(一個身份對映)。對於 clusterIP=None 的服務,此欄位將被忽略,應省略或設定為等於“port”欄位。更多資訊:https://kubernetes.club.tw/docs/concepts/services-networking/service/#defining-a-service
IntOrString 是一個可以容納 int32 或字串的型別。當在 JSON 或 YAML 編組和解組中使用時,它會生成或消費內部型別。這允許你有一個 JSON 欄位,例如,可以接受名稱或數字。
ports.protocol (string)
此埠的 IP 協議。支援“TCP”、“UDP”和“SCTP”。預設為 TCP。
ports.name (string)
此埠在服務中的名稱。這必須是 DNS_LABEL。ServiceSpec 中的所有埠都必須具有唯一的名稱。在考慮服務的端點時,這必須與 EndpointPort 中的“name”欄位匹配。如果此服務上只定義了一個 ServicePort,則此欄位可選。
ports.nodePort (int32)
當型別為 NodePort 或 LoadBalancer 時,此服務在每個節點上公開的埠。通常由系統分配。如果指定的值在範圍內且未被使用,則將使用該值,否則操作將失敗。如果未指定,如果此服務需要埠,則將分配一個埠。如果建立不需要此欄位的服務時指定此欄位,則建立將失敗。當更新服務使其不再需要此欄位時(例如,將型別從 NodePort 更改為 ClusterIP),此欄位將被清除。更多資訊:https://kubernetes.club.tw/docs/concepts/services-networking/service/#type-nodeport
ports.appProtocol (string)
此埠的應用協議。這用作實現的提示,以便為它們理解的協議提供更豐富的行為。此欄位遵循標準 Kubernetes 標籤語法。有效值可以是
無字首協議名稱 - 保留用於 IANA 標準服務名稱(根據 RFC-6335 和 https://www.iana.org/assignments/service-names))。
Kubernetes 定義的帶字首名稱
- 'kubernetes.io/h2c' - 根據 https://www.rfc-editor.org/rfc/rfc9113.html#name-starting-http-2-with-prior- 所述,透過明文進行的 HTTP/2 預知。
- 'kubernetes.io/ws' - 根據 https://www.rfc-editor.org/rfc/rfc6455 所述,透過明文進行的 WebSocket。
- 'kubernetes.io/wss' - 根據 https://www.rfc-editor.org/rfc/rfc6455 所述,透過 TLS 進行的 WebSocket。
其他協議應使用實現定義的帶字首名稱,例如 mycompany.com/my-custom-protocol。
type (string)
type 決定了服務如何公開。預設為 ClusterIP。有效選項為 ExternalName、ClusterIP、NodePort 和 LoadBalancer。“ClusterIP”為負載均衡到端點分配叢集內部 IP 地址。端點由選擇器決定,如果未指定選擇器,則透過手動構建 Endpoints 物件或 EndpointSlice 物件決定。如果 clusterIP 為“None”,則不分配虛擬 IP,並且端點作為一組端點而不是虛擬 IP 釋出。“NodePort”建立在 ClusterIP 之上,並在每個節點上分配一個埠,該埠路由到與 clusterIP 相同的端點。“LoadBalancer”建立在 NodePort 之上,並建立一個外部負載均衡器(如果當前雲支援),該負載均衡器路由到與 clusterIP 相同的端點。“ExternalName”將此服務別名為指定的 externalName。其他幾個欄位不適用於 ExternalName 服務。更多資訊:https://kubernetes.club.tw/docs/concepts/services-networking/service/#publishing-services-service-types
ipFamilies ([]string)
原子性:在合併期間將被替換
IPFamilies 是分配給此服務的 IP 系列(例如 IPv4、IPv6)列表。此欄位通常根據叢集配置和 ipFamilyPolicy 欄位自動分配。如果手動指定此欄位,並且請求的系列在叢集中可用,並且 ipFamilyPolicy 允許,則將使用該欄位;否則服務建立將失敗。此欄位是條件可變的:它允許新增或刪除輔助 IP 系列,但不允許更改服務的主要 IP 系列。有效值為“IPv4”和“IPv6”。此欄位僅適用於 ClusterIP、NodePort 和 LoadBalancer 型別的服務,並且適用於“無頭”服務。當將服務更新為 ExternalName 型別時,此欄位將被清除。
此欄位最多可以包含兩個條目(雙棧系列,順序任意)。如果指定了 clusterIPs 欄位,這些系列必須與 clusterIPs 欄位的值對應。clusterIPs 和 ipFamilies 都受 ipFamilyPolicy 欄位的控制。
ipFamilyPolicy (string)
IPFamilyPolicy 表示此服務請求或需要的雙棧特性。如果未提供值,則此欄位將設定為 SingleStack。服務可以是“SingleStack”(單個 IP 系列)、“PreferDualStack”(在雙棧配置叢集上使用兩個 IP 系列或在單棧叢集上使用單個 IP 系列)或“RequireDualStack”(在雙棧配置叢集上使用兩個 IP 系列,否則失敗)。ipFamilies 和 clusterIPs 欄位取決於此欄位的值。當將服務更新為 ExternalName 型別時,此欄位將被清除。
clusterIP (string)
clusterIP 是服務的 IP 地址,通常是隨機分配的。如果手動指定地址,該地址在範圍內(根據系統配置),並且未被使用,則會將其分配給服務;否則服務建立將失敗。此欄位不能透過更新更改,除非型別欄位也正在更改為 ExternalName(這需要此欄位為空白)或型別欄位正在從 ExternalName 更改(在這種情況下,此欄位可以可選地指定,如上所述)。有效值為“None”、空字串(“”)或有效的 IP 地址。將其設定為“None”將建立“無頭服務”(沒有虛擬 IP),當首選直接端點連線且不需要代理時,這很有用。僅適用於 ClusterIP、NodePort 和 LoadBalancer 型別。如果建立 ExternalName 型別的服務時指定此欄位,建立將失敗。當將服務更新為 ExternalName 型別時,此欄位將被清除。更多資訊:https://kubernetes.club.tw/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies
clusterIPs ([]string)
原子性:在合併期間將被替換
ClusterIPs 是分配給此服務的 IP 地址列表,通常是隨機分配的。如果手動指定地址,該地址在範圍內(根據系統配置),並且未被使用,則會將其分配給服務;否則服務建立將失敗。此欄位不能透過更新更改,除非型別欄位也正在更改為 ExternalName(這需要此欄位為空)或型別欄位正在從 ExternalName 更改(在這種情況下,此欄位可以可選地指定,如上所述)。有效值為“None”、空字串(“”)或有效的 IP 地址。將其設定為“None”將建立“無頭服務”(沒有虛擬 IP),當首選直接端點連線且不需要代理時,這很有用。僅適用於 ClusterIP、NodePort 和 LoadBalancer 型別。如果建立 ExternalName 型別的服務時指定此欄位,建立將失敗。當將服務更新為 ExternalName 型別時,此欄位將被清除。如果未指定此欄位,它將從 clusterIP 欄位初始化。如果指定此欄位,客戶端必須確保 clusterIPs[0] 和 clusterIP 具有相同的值。
此欄位最多可以包含兩個條目(雙棧 IP,順序任意)。這些 IP 必須與 ipFamilies 欄位的值對應。clusterIPs 和 ipFamilies 都受 ipFamilyPolicy 欄位的控制。更多資訊:https://kubernetes.club.tw/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies
externalIPs ([]string)
原子性:在合併期間將被替換
externalIPs 是 IP 地址列表,叢集中的節點也將接受此服務的流量。這些 IP 不由 Kubernetes 管理。使用者負責確保流量透過此 IP 到達節點。一個常見的例子是不屬於 Kubernetes 系統的外部負載均衡器。
sessionAffinity (string)
支援“ClientIP”和“None”。用於維護會話親和性。啟用基於客戶端 IP 的會話親和性。必須是 ClientIP 或 None。預設為 None。更多資訊:https://kubernetes.club.tw/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies
loadBalancerIP (string)
僅適用於服務型別:LoadBalancer。此功能取決於底層雲提供商是否支援在建立負載均衡器時指定 loadBalancerIP。如果雲提供商不支援此功能,此欄位將被忽略。已棄用:此欄位定義不明確,其含義因實現而異。使用它不可移植,並且可能不支援雙棧。建議使用者在可用時使用特定於實現的註解。
loadBalancerSourceRanges ([]string)
原子性:在合併期間將被替換
如果指定且平臺支援,這將限制透過雲提供商負載均衡器的流量,流量將僅限於指定的客戶端 IP。如果雲提供商不支援此功能,此欄位將被忽略。”更多資訊:https://kubernetes.club.tw/docs/tasks/access-application-cluster/create-external-load-balancer/
loadBalancerClass (string)
loadBalancerClass 是此服務所屬的負載均衡器實現的類。如果指定,此欄位的值必須是標籤樣式識別符號,帶有可選字首,例如“internal-vip”或“example.com/internal-vip”。未加字首的名稱保留給終端使用者。此欄位只能在服務型別為“LoadBalancer”時設定。如果未設定,則使用預設負載均衡器實現,目前這通常透過雲提供商整合完成,但應適用於任何預設實現。如果設定,則假定負載均衡器實現正在監視具有匹配類的服務。任何預設負載均衡器實現(例如雲提供商)都應忽略設定此欄位的服務。此欄位只能在建立或將服務更新為“LoadBalancer”型別時設定。一旦設定,就不能更改。當服務更新為非“LoadBalancer”型別時,此欄位將被清除。
externalName (string)
externalName 是發現機制將作為此服務的別名返回的外部引用(例如 DNS CNAME 記錄)。不涉及代理。必須是小寫的 RFC-1123 主機名(https://tools.ietf.org/html/rfc1123),並且要求
type
為“ExternalName”。externalTrafficPolicy (string)
externalTrafficPolicy 描述了節點如何分配它們在服務的“面向外部”地址(NodePorts、ExternalIPs 和 LoadBalancer IPs)上接收到的服務流量。如果設定為“Local”,代理將以一種方式配置服務,假定外部負載均衡器將負責在節點之間平衡服務流量,因此每個節點將僅將流量傳輸到服務的節點本地端點,而無需偽裝客戶端源 IP。(錯誤地傳送到沒有端點的節點的流量將被丟棄。)預設值“Cluster”使用路由到所有端點的標準行為(可能受拓撲和其他功能修改)。請注意,從叢集內部發送到外部 IP 或 LoadBalancer IP 的流量將始終獲得“Cluster”語義,但從叢集內部發送到 NodePort 的客戶端在選擇節點時可能需要考慮流量策略。
internalTrafficPolicy (string)
InternalTrafficPolicy 描述了節點如何分配它們在 ClusterIP 上接收到的服務流量。如果設定為“Local”,代理將假定 Pod 僅希望與 Pod 所在節點上的服務端點通訊,如果沒有本地端點則丟棄流量。預設值“Cluster”使用路由到所有端點的標準行為(可能受拓撲和其他功能修改)。
healthCheckNodePort (int32)
healthCheckNodePort 指定了服務的健康檢查節點埠。這僅適用於型別設定為 LoadBalancer 且 externalTrafficPolicy 設定為 Local 的情況。如果指定的值在範圍內且未被使用,則將使用該值。如果未指定,則將自動分配一個值。外部系統(例如負載均衡器)可以使用此埠來確定給定節點是否包含此服務的端點。如果建立不需要此欄位的服務時指定此欄位,則建立將失敗。當更新服務使其不再需要此欄位時(例如,更改型別),此欄位將被清除。此欄位一旦設定,就不能更新。
publishNotReadyAddresses (boolean)
publishNotReadyAddresses 表示任何處理此服務端點的代理都應忽略任何就緒/未就緒的指示。設定此欄位的主要用例是 StatefulSet 的無頭服務為其 Pod 傳播 SRV DNS 記錄,以進行對等發現。生成 Endpoints 和 EndpointSlice 資源的 Kubernetes 控制器將其解釋為所有端點都被視為“就緒”,即使 Pod 本身尚未就緒。僅透過 Endpoints 或 EndpointSlice 資源使用 Kubernetes 生成的端點的代理可以安全地假定此行為。
sessionAffinityConfig (SessionAffinityConfig)
sessionAffinityConfig 包含會話親和性的配置。
allocateLoadBalancerNodePorts (boolean)
allocateLoadBalancerNodePorts 定義了是否為型別為 LoadBalancer 的服務自動分配 NodePort。預設為“true”。如果叢集負載均衡器不依賴 NodePort,則可以將其設定為“false”。如果呼叫者請求特定的 NodePort(透過指定值),這些請求將得到尊重,無論此欄位如何。此欄位只能為型別為 LoadBalancer 的服務設定,如果型別更改為任何其他型別,則將被清除。
trafficDistribution (string)
TrafficDistribution 提供了一種表達如何將流量分配到服務端點的偏好方式。實現可以將此欄位作為提示,但不需要保證嚴格遵守。如果未設定此欄位,則實現將應用其預設路由策略。如果設定為“PreferClose”,則實現應優先考慮同一區域中的端點。
ServiceStatus
ServiceStatus 表示服務的當前狀態。
conditions ([]Condition)
補丁策略:按鍵
type
合併對映:合併時將保留鍵型別上的唯一值
當前服務狀態
Condition 包含此 API 資源當前狀態的一個方面的詳細資訊。
conditions.lastTransitionTime (Time),必需
lastTransitionTime 是條件上次從一種狀態轉換到另一種狀態的時間。這應該是底層條件發生變化的時間。如果不知道,則使用 API 欄位發生變化的時間是可接受的。
Time 是 time.Time 的一個包裝器,支援正確地編組到 YAML 和 JSON。提供了 time 包提供的許多工廠方法的包裝器。
conditions.message (string),必需
message 是一個人類可讀的訊息,指示有關轉換的詳細資訊。這可能是一個空字串。
conditions.reason (string),必需
reason 包含一個程式化識別符號,指示條件上次轉換的原因。特定條件型別的生產者可以定義此欄位的預期值和含義,以及這些值是否被視為有保證的 API。該值應為 CamelCase 字串。此欄位不能為空。
conditions.status (string),必需
條件狀態,True、False、Unknown 之一。
conditions.type (string),必需
條件型別,CamelCase 或 foo.example.com/CamelCase。
conditions.observedGeneration (int64)
observedGeneration 表示條件所基於的 .metadata.generation。例如,如果 .metadata.generation 當前為 12,但 .status.conditions[x].observedGeneration 為 9,則條件與例項的當前狀態相比已過時。
loadBalancer (LoadBalancerStatus)
loadBalancer 包含負載均衡器的當前狀態,如果存在的話。
LoadBalancerStatus 表示負載均衡器的狀態。
loadBalancer.ingress ([]LoadBalancerIngress)
原子性:在合併期間將被替換
Ingress 是一個列表,包含負載均衡器的入口點。預期傳送到服務的流量應傳送到這些入口點。
LoadBalancerIngress 表示負載均衡器入口點的狀態:預期傳送到服務的流量應傳送到入口點。
loadBalancer.ingress.hostname (string)
Hostname 用於基於 DNS 的負載均衡器入口點(通常是 AWS 負載均衡器)
loadBalancer.ingress.ip (string)
IP 用於基於 IP 的負載均衡器入口點(通常是 GCE 或 OpenStack 負載均衡器)
loadBalancer.ingress.ipMode (string)
IPMode 指定負載均衡器 IP 的行為方式,並且只能在指定 ip 欄位時指定。將其設定為“VIP”表示流量被傳輸到節點,目標設定為負載均衡器的 IP 和埠。將其設定為“Proxy”表示流量被傳輸到節點或 Pod,目標設定為節點的 IP 和節點埠或 Pod 的 IP 和埠。服務實現可以使用此資訊來調整流量路由。
loadBalancer.ingress.ports ([]PortStatus)
原子性:在合併期間將被替換
Ports 是服務埠記錄的列表。如果使用,服務中定義的每個埠都應該有一個條目。
loadBalancer.ingress.ports.port (int32),必需
Port 是此處記錄狀態的服務埠的埠號。
loadBalancer.ingress.ports.protocol (string),必需
Protocol 是此處記錄狀態的服務埠的協議。支援的值為:“TCP”、“UDP”、“SCTP”
loadBalancer.ingress.ports.error (string)
Error 用於記錄服務埠的問題。錯誤格式應符合以下規則:- 內建錯誤值應在此檔案中指定,並且應使用 CamelCase 名稱。
- 雲提供商特定的錯誤值必須具有符合 foo.example.com/CamelCase 格式的名稱。
ServiceList
ServiceList 包含服務列表。
apiVersion: v1
kind: ServiceList
metadata (ListMeta)
標準列表元資料。更多資訊: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
items ([]Service),必需
服務列表
操作
get
讀取指定的 Service
HTTP 請求
GET /api/v1/namespaces/{namespace}/services/{name}
引數
響應
200 (Service): OK
401: 未授權
get
讀取指定 Service 的狀態
HTTP 請求
GET /api/v1/namespaces/{namespace}/services/{name}/status
引數
響應
200 (Service): OK
401: 未授權
list
列出或監視 Service 型別的物件
HTTP 請求
GET /api/v1/namespaces/{namespace}/services
引數
namespace (在路徑中): string,必填
allowWatchBookmarks (在查詢中): boolean
continue (在查詢中): string
fieldSelector (在查詢中): string
labelSelector (在查詢中): string
limit (在查詢中): integer
pretty (在查詢中): string
resourceVersion (在查詢中): string
resourceVersionMatch (在查詢中): string
sendInitialEvents (在查詢中): boolean
timeoutSeconds (在查詢中): integer
watch (在查詢中): boolean
響應
200 (ServiceList): OK
401: 未授權
list
列出或監視 Service 型別的物件
HTTP 請求
GET /api/v1/services
引數
allowWatchBookmarks (在查詢中): boolean
continue (在查詢中): string
fieldSelector (在查詢中): string
labelSelector (在查詢中): string
limit (在查詢中): integer
pretty (在查詢中): string
resourceVersion (在查詢中): string
resourceVersionMatch (在查詢中): string
sendInitialEvents (在查詢中): boolean
timeoutSeconds (在查詢中): integer
watch (在查詢中): boolean
響應
200 (ServiceList): OK
401: 未授權
create
建立一個 Service
HTTP 請求
POST /api/v1/namespaces/{namespace}/services
引數
namespace (在路徑中): string,必填
body: Service,必需
dryRun (在查詢中): string
fieldManager (在查詢中): string
fieldValidation (在查詢中): string
pretty (在查詢中): string
響應
200 (Service): OK
201 (Service): 已建立
202 (Service): 已接受
401: 未授權
update
替換指定的 Service
HTTP 請求
PUT /api/v1/namespaces/{namespace}/services/{name}
引數
name (在路徑中): string,必填
Service 的名稱
namespace (在路徑中): string,必填
body: Service,必需
dryRun (在查詢中): string
fieldManager (在查詢中): string
fieldValidation (在查詢中): string
pretty (在查詢中): string
響應
200 (Service): OK
201 (Service): 已建立
401: 未授權
update
替換指定的 Service 狀態
HTTP 請求
PUT /api/v1/namespaces/{namespace}/services/{name}/status
引數
name (在路徑中): string,必填
Service 的名稱
namespace (在路徑中): string,必填
body: Service,必需
dryRun (在查詢中): string
fieldManager (在查詢中): string
fieldValidation (在查詢中): string
pretty (在查詢中): string
響應
200 (Service): OK
201 (Service): 已建立
401: 未授權
patch
部分更新指定的 Service
HTTP 請求
PATCH /api/v1/namespaces/{namespace}/services/{name}
引數
name (在路徑中): string,必填
Service 的名稱
namespace (在路徑中): string,必填
body: Patch,必需
dryRun (在查詢中): string
fieldManager (在查詢中): string
fieldValidation (在查詢中): string
force (在查詢中): boolean
pretty (在查詢中): string
響應
200 (Service): OK
201 (Service): 已建立
401: 未授權
patch
部分更新指定的 Service 狀態
HTTP 請求
PATCH /api/v1/namespaces/{namespace}/services/{name}/status
引數
name (在路徑中): string,必填
Service 的名稱
namespace (在路徑中): string,必填
body: Patch,必需
dryRun (在查詢中): string
fieldManager (在查詢中): string
fieldValidation (在查詢中): string
force (在查詢中): boolean
pretty (在查詢中): string
響應
200 (Service): OK
201 (Service): 已建立
401: 未授權
delete
刪除一個 Service
HTTP 請求
DELETE /api/v1/namespaces/{namespace}/services/{name}
引數
name (在路徑中): string,必填
Service 的名稱
namespace (在路徑中): string,必填
body: DeleteOptions
dryRun (在查詢中): string
gracePeriodSeconds (在查詢中): integer
ignoreStoreReadErrorWithClusterBreakingPotential (在查詢中): boolean
pretty (在查詢中): string
propagationPolicy (在查詢中): string
響應
200 (Service): OK
202 (Service): 已接受
401: 未授權
deletecollection
刪除 Service 集合
HTTP 請求
DELETE /api/v1/namespaces/{namespace}/services
引數
namespace (在路徑中): string,必填
body: DeleteOptions
continue (在查詢中): string
dryRun (在查詢中): string
fieldSelector (在查詢中): string
gracePeriodSeconds (在查詢中): integer
ignoreStoreReadErrorWithClusterBreakingPotential (在查詢中): boolean
labelSelector (在查詢中): string
limit (在查詢中): integer
pretty (在查詢中): string
propagationPolicy (在查詢中): string
resourceVersion (在查詢中): string
resourceVersionMatch (在查詢中): string
sendInitialEvents (在查詢中): boolean
timeoutSeconds (在查詢中): integer
響應
200 (Status): OK
401: 未授權
本頁面是自動生成的。
如果你打算報告此頁面存在的問題,請在問題描述中提及此頁面是自動生成的。修復可能需要在 Kubernetes 專案的其他地方進行。