api/operator/v1alpha1/operator.proto

778 lines
27 KiB
Protocol Buffer

// Copyright 2019 Istio Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
syntax = "proto3";
// $title: IstioOperator Options
// $description: Configuration affecting Istio control plane installation version and shape.
// $location: https://istio.io/docs/reference/config/istio.operator.v1alpha1.html
// $weight: 20
// $mode: package
// Configuration affecting Istio control plane installation version and shape.
// Note: unlike other Istio protos, field names must use camelCase. This is asserted in tests.
// Without camelCase, the `json` tag on the Go struct will not match the user's JSON representation.
// This leads to Kubernetes merge libraries, which rely on this tag, to fail.
// All other usages use jsonpb which does not use the `json` tag.
package istio.operator.v1alpha1;
option go_package="istio.io/api/operator/v1alpha1";
import "google/protobuf/any.proto";
import "google/protobuf/struct.proto";
import "google/protobuf/wrappers.proto";
import "k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto";
import "k8s.io/api/core/v1/generated.proto";
// <!-- go code generation tags
// +kubetype-gen
// +kubetype-gen:groupVersion=install.istio.io/v1alpha1
// +genclient
// +k8s:deepcopy-gen=true
// -->
// IstioOperatorSpec defines the desired installed state of Istio components.
// The spec is a used to define a customization of the default profile values that are supplied with each Istio release.
// Because the spec is a customization API, specifying an empty IstioOperatorSpec results in a default Istio
// component values.
//
// ```yaml
// apiVersion: install.istio.io/v1alpha1
// kind: IstioOperator
// spec:
// profile: default
// hub: gcr.io/istio-testing
// tag: latest
// revision: 1-8-0
// meshConfig:
// accessLogFile: /dev/stdout
// enableTracing: true
// components:
// egressGateways:
// - name: istio-egressgateway
// enabled: true
// ```
//
message IstioOperatorSpec {
// Path or name for the profile e.g.
//
// * minimal (looks in profiles dir for a file called minimal.yaml)
// * /tmp/istio/install/values/custom/custom-install.yaml (local file path)
//
// default profile is used if this field is unset.
string profile = 10;
// Path for the install package. e.g.
//
// * /tmp/istio-installer/nightly (local file path)
//
string installPackagePath = 11;
// Root for docker image paths e.g. `docker.io/istio`
string hub = 12;
// Version tag for docker images e.g. `1.7.2`
google.protobuf.Value tag = 13;
// $hide_from_docs
// Resource suffix is appended to all resources installed by each component.
// Never implemented; replaced by revision.
string resourceSuffix = 14 [deprecated = true];
// Namespace to install control plane resources into. If unset, Istio will be installed into the same namespace
// as the `IstioOperator` CR. You must also set `values.global.istioNamespace` if you wish to install Istio in
// a custom namespace.
// If you have enabled CNI, you must exclude this namespace by adding it to the list `values.cni.excludeNamespaces`.
string namespace = 15;
// Identify the revision this installation is associated with.
// This option is currently experimental.
string revision = 16;
// Compatibility version allows configuring Istio to behave like an older version by tuning various settings to align with a
// previous versions defaults. This accepts a `major.minor` format, such as `1.23`.
// This option is currently experimental.
string compatibilityVersion = 18;
reserved 17; //
reserved "defaultRevision";
// Config used by control plane components internally.
google.protobuf.Struct meshConfig = 40;
// Kubernetes resource settings, enablement and component-specific settings that are not internal to the
// component.
IstioComponentSetSpec components = 50;
// Deprecated.
// Users should manage the installation of addon components on their own.
// Refer to samples/addons for demo installation of addon components.
map<string, ExternalComponentSpec> addonComponents = 51 [deprecated = true];
// Overrides for default `values.yaml`. This is a validated pass-through to Helm templates.
// See the [Helm installation options](https://istio.io/v1.5/docs/reference/config/installation-options/) for schema details.
// Anything that is available in `IstioOperatorSpec` should be set above rather than using the passthrough. This
// includes Kubernetes resource settings for components in `KubernetesResourcesSpec`.
google.protobuf.Struct values = 100;
// Unvalidated overrides for default `values.yaml`. Used for custom templates where new parameters are added.
google.protobuf.Struct unvalidatedValues = 101;
}
// Observed state of IstioOperator
message InstallStatus {
// Status describes the current state of a component.
enum Status {
// Component is not present.
NONE = 0;
// Component is being updated to a different version.
UPDATING = 1;
// Controller has started but not yet completed reconciliation loop for the component.
RECONCILING = 2;
// Component is healthy.
HEALTHY = 3;
// Component is in an error state.
ERROR = 4;
// Overall status only and would not be set as a component status.
// Action is needed from the user for reconciliation to proceed
// e.g. There are proxies still pointing to the control plane revision when try to remove an `IstioOperator` CR.
ACTION_REQUIRED = 5;
}
// VersionStatus is the status and version of a component.
message VersionStatus {
string version = 1;
Status status = 2;
string error = 4;
}
// Overall status of all components controlled by the operator.
//
// * If all components have status `NONE`, overall status is `NONE`.
// * If all components are `HEALTHY`, overall status is `HEALTHY`.
// * If one or more components are `RECONCILING` and others are `HEALTHY`, overall status is `RECONCILING`.
// * If one or more components are `UPDATING` and others are `HEALTHY`, overall status is `UPDATING`.
// * If components are a mix of `RECONCILING`, `UPDATING` and `HEALTHY`, overall status is `UPDATING`.
// * If any component is in `ERROR` state, overall status is `ERROR`.
// * If further action is needed for reconciliation to proceed, overall status is `ACTION_REQUIRED`.
//
Status status = 1;
// Optional message providing additional information about the existing overall status.
string message = 3;
// Individual status of each component controlled by the operator. The map key is the name of the component.
map<string, VersionStatus> componentStatus = 2;
}
// IstioComponentSpec defines the desired installed state of Istio components.
message IstioComponentSetSpec {
BaseComponentSpec base = 29;
ComponentSpec pilot = 30;
ComponentSpec cni = 38;
ComponentSpec ztunnel = 42;
// Remote cluster using an external control plane.
ComponentSpec istiodRemote = 39;
repeated GatewaySpec ingressGateways = 40;
repeated GatewaySpec egressGateways = 41;
reserved 31, 32, 33, 34, 35, 36, 37;
reserved "citadel", "policy", "telemetry", "galley", "node_agent", "proxy", "sidecar_injector";
}
// Configuration for base component.
message BaseComponentSpec {
// Selects whether this component is installed.
google.protobuf.BoolValue enabled = 1;
// Kubernetes resource spec.
KubernetesResourcesSpec k8s = 50;
}
// Configuration for internal components.
message ComponentSpec {
// Selects whether this component is installed.
google.protobuf.BoolValue enabled = 1;
// Namespace for the component.
string namespace = 2;
// Hub for the component (overrides top level hub setting).
string hub = 10;
// Tag for the component (overrides top level tag setting).
google.protobuf.Value tag = 11;
// Arbitrary install time configuration for the component.
google.protobuf.Struct spec = 30;
// Kubernetes resource spec.
KubernetesResourcesSpec k8s = 50;
}
// Configuration for external components.
message ExternalComponentSpec {
// Selects whether this component is installed.
google.protobuf.BoolValue enabled = 1;
// Namespace for the component.
string namespace = 2;
// Arbitrary install time configuration for the component.
google.protobuf.Struct spec = 10;
// Chart path for addon components.
string chartPath = 30;
// Optional schema to validate spec against.
google.protobuf.Any schema = 35;
// Kubernetes resource spec.
KubernetesResourcesSpec k8s = 50;
}
// Configuration for gateways.
message GatewaySpec {
// Selects whether this gateway is installed.
google.protobuf.BoolValue enabled = 1;
// Namespace for the gateway.
string namespace = 2;
// Name for the gateway.
string name = 3;
// Labels for the gateway.
map <string, string> label = 4;
// Hub for the component (overrides top level hub setting).
string hub = 10;
// Tag for the component (overrides top level tag setting).
google.protobuf.Value tag = 11;
// Kubernetes resource spec.
KubernetesResourcesSpec k8s = 50;
}
// KubernetesResourcesSpec is a common set of Kubernetes resource configs for components.
message KubernetesResourcesSpec {
// Kubernetes affinity.
// [https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity](https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity)
Affinity affinity = 1;
// Deployment environment variables.
// [https://kubernetes.io/docs/tasks/inject-data-application/define-environment-variable-container/](https://kubernetes.io/docs/tasks/inject-data-application/define-environment-variable-container/)
repeated EnvVar env = 2;
// Kubernetes HorizontalPodAutoscaler settings.
// [https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/](https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/)
HorizontalPodAutoscalerSpec hpaSpec = 3;
// Kubernetes imagePullPolicy.
// [https://kubernetes.io/docs/concepts/containers/images/](https://kubernetes.io/docs/concepts/containers/images/)
string imagePullPolicy = 4;
// Kubernetes nodeSelector.
// [https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#nodeselector](https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#nodeselector)
map<string, string> nodeSelector = 5;
// Kubernetes PodDisruptionBudget settings.
// [https://kubernetes.io/docs/concepts/workloads/pods/disruptions/#how-disruption-budgets-work](https://kubernetes.io/docs/concepts/workloads/pods/disruptions/#how-disruption-budgets-work)
PodDisruptionBudgetSpec podDisruptionBudget = 6;
// Kubernetes pod annotations.
// [https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/](https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/)
map<string, string> podAnnotations = 7;
// Kubernetes priorityClassName. Default for all resources unless overridden.
// [https://kubernetes.io/docs/concepts/configuration/pod-priority-preemption/#priorityclass](https://kubernetes.io/docs/concepts/configuration/pod-priority-preemption/#priorityclass)
string priorityClassName = 8;
// Kubernetes readinessProbe settings.
// [https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes/](https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes/)
// k8s.io.api.core.v1.Probe readiness_probe = 9;
ReadinessProbe readinessProbe = 9;
// Kubernetes Deployment replicas setting.
// [https://kubernetes.io/docs/concepts/workloads/controllers/deployment/](https://kubernetes.io/docs/concepts/workloads/controllers/deployment/)
uint32 replicaCount = 10;
// Kubernetes resources settings.
// [https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/#resource-requests-and-limits-of-pod-and-container](https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/#resource-requests-and-limits-of-pod-and-container)
Resources resources = 11;
// Kubernetes Service settings.
// [https://kubernetes.io/docs/concepts/services-networking/service/](https://kubernetes.io/docs/concepts/services-networking/service/)
ServiceSpec service = 12;
// Kubernetes deployment strategy.
// [https://kubernetes.io/docs/concepts/workloads/controllers/deployment/](https://kubernetes.io/docs/concepts/workloads/controllers/deployment/)
DeploymentStrategy strategy = 13;
// Kubernetes toleration
// [https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/](https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/)
repeated Toleration tolerations = 14;
// Kubernetes service annotations.
// [https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/](https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/)
map<string, string> serviceAnnotations = 15;
// Kubernetes pod security context
// [https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod](https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod)
PodSecurityContext securityContext = 16;
// Kubernetes volumes
// [https://kubernetes.io/docs/concepts/storage/volumes/](https://kubernetes.io/docs/concepts/storage/volumes/)
// Volumes defines the collection of Volume to inject into the pod.
repeated k8s.io.api.core.v1.Volume volumes = 17;
// Kubernetes volumeMounts
// VolumeMounts defines the collection of VolumeMount to inject into containers.
repeated k8s.io.api.core.v1.VolumeMount volumeMounts = 18;
// Overlays for Kubernetes resources in rendered manifests.
repeated K8sObjectOverlay overlays = 100;
}
// Patch for an existing Kubernetes resource.
message K8sObjectOverlay {
message PathValue {
// Path of the form a.[key1:value1].b.[:value2]
// Where [key1:value1] is a selector for a key-value pair to identify a list element and [:value] is a value
// selector to identify a list element in a leaf list.
// All path intermediate nodes must exist.
string path = 1;
// Value to add, delete or replace.
// For add, the path should be a new leaf.
// For delete, value should be unset.
// For replace, path should reference an existing node.
// All values are strings but are converted into appropriate type based on schema.
google.protobuf.Value value = 2;
}
// Resource API version.
string apiVersion = 1;
// Resource kind.
string kind = 2;
// Name of resource.
// Namespace is always the component namespace.
string name = 3;
// List of patches to apply to resource.
repeated PathValue patches = 4;
}
// See k8s.io.api.core.v1.Affinity.
message Affinity {
NodeAffinity nodeAffinity = 1;
PodAffinity podAffinity = 2;
PodAntiAffinity podAntiAffinity = 3;
}
// See k8s.io.api.core.v1.ConfigMapKeySelector.
message ConfigMapKeySelector {
LocalObjectReference localObjectReference = 1;
string key = 2;
bool optional = 3;
}
// See k8s.io.api.autoscaling.v2beta2.ContainerResourceMetricSource.
message ContainerResourceMetricSource {
string name = 1;
MetricTarget target = 2;
string container = 3;
}
// See k8s.io.api.autoscaling.v2beta2.ContainerResourceMetricStatus.
message ContainerResourceMetricStatus {
string name = 1;
MetricValueStatus current = 2;
string container = 3;
}
// See k8s.io.api.core.v1.ClientIPConfig.
message ClientIPConfig {
int32 timeoutSeconds = 1;
}
// See k8s.io.api.autoscaling.v2beta2.CrossVersionObjectReference.
message CrossVersionObjectReference {
string kind = 1;
string name = 2;
string apiVersion = 3;
}
// See k8s.io.api.apps.v1.DeploymentStrategy.
message DeploymentStrategy {
string type = 1;
RollingUpdateDeployment rollingUpdate = 2;
}
// See k8s.io.api.core.v1.EnvVar.
message EnvVar {
string name = 1;
string value = 2;
EnvVarSource valueFrom = 3;
}
// See k8s.io.api.core.v1.EnvVarSource.
message EnvVarSource {
ObjectFieldSelector fieldRef = 1;
ResourceFieldSelector resourceFieldRef = 2;
ConfigMapKeySelector configMapKeyRef = 3;
SecretKeySelector secretKeyRef = 4;
}
// See k8s.io.api.core.v1.ExecAction.
message ExecAction {
repeated string command = 1;
}
// See k8s.io.api.autoscaling.v2beta2.ExternalMetricSource.
message ExternalMetricSource {
string metricName = 1 [deprecated = true];
k8s.io.apimachinery.pkg.apis.meta.v1.LabelSelector metricSelector = 2 [deprecated = true];
IntOrString targetValue = 3 [deprecated = true];
IntOrString targetAverageValue = 4 [deprecated = true];
MetricIdentifier metric = 5;
MetricTarget target = 6;
}
// See k8s.io.autoscaling.v2beta2.ExternalMetricStatus.
message ExternalMetricStatus {
MetricIdentifier metric = 1;
MetricValueStatus current = 2;
}
// See k8s.io.api.core.v1.HTTPGetAction.
message HTTPGetAction {
string path = 1;
IntOrString port = 2;
string host = 3;
string scheme = 4;
repeated HTTPHeader httpHeaders = 5;
}
// See k8s.io.api.core.v1.HTTPHeader.
message HTTPHeader {
string name = 1;
string value = 2;
}
// See k8s.io.api.autoscaling.v2beta1.HorizontalPodAutoscalerSpec.
message HorizontalPodAutoscalerSpec {
CrossVersionObjectReference scaleTargetRef = 1;
int32 minReplicas = 2;
int32 maxReplicas = 3;
repeated MetricSpec metrics = 4;
HorizontalPodAutoScalerBehavior behavior = 5;
}
// See k8s.io.autoscaling.v2beta2.HorizontalPodAutoScalerBehavior.
message HorizontalPodAutoScalerBehavior {
HPAScalingRules scaleUp = 1;
HPAScalingRules scaleDown = 2;
}
// See k8s.io.autoscaling.v2beta2.HPAScalingRules.
message HPAScalingRules {
int32 stabilizationWindowSeconds = 3;
string selectPolicy = 1;
repeated HPAScalingPolicy policies = 2;
}
// See k8s.io.autoscaling.v2beta2.HPAScalingPolicy.
message HPAScalingPolicy {
string type = 1;
int32 value = 2;
int32 periodSeconds = 3;
}
// See k8s.io.api.core.v1.LocalObjectReference.
message LocalObjectReference {
string name = 1;
}
// See k8s.io.autoscaling.v2beta2.MetricIdentifier.
message MetricIdentifier {
optional string name = 1;
k8s.io.apimachinery.pkg.apis.meta.v1.LabelSelector selector = 2;
}
// See k8s.io.autoscaling.v2beta2.MetricSpec.
message MetricSpec {
string type = 1;
ObjectMetricSource object = 2;
PodsMetricSource pods = 3;
ResourceMetricSource resource = 4;
ContainerResourceMetricSource containerResource = 7;
ExternalMetricSource external = 5;
}
// See k8s.io.autoscaling.v2beta2.MetricStatus.
message MetricStatus {
string type = 1;
ObjectMetricStatus object = 2;
PodsMetricStatus pods = 3;
ResourceMetricStatus resource = 4;
ContainerResourceMetricStatus containerResource = 7;
ExternalMetricStatus external = 5;
}
// See k8s.io.autoscaling.v2beta2.MetricTarget.
message MetricTarget {
string type = 1;
IntOrString value = 2;
IntOrString averageValue = 3;
int32 averageUtilization = 4;
}
// See k8s.io.autoscaling.v2beta2.MetricValueStatus.
message MetricValueStatus {
IntOrString value = 1;
IntOrString averageValue = 2;
int32 averageUtilization = 3;
}
// See k8s.io.api.core.v1.NodeAffinity.
message NodeAffinity {
NodeSelector requiredDuringSchedulingIgnoredDuringExecution = 1;
repeated PreferredSchedulingTerm preferredDuringSchedulingIgnoredDuringExecution = 2;
}
// See k8s.io.api.core.v1.NodeSelector.
message NodeSelector {
repeated NodeSelectorTerm nodeSelectorTerms = 1;
}
// See k8s.io.api.core.v1.NodeSelectorTerm.
message NodeSelectorTerm {
repeated NodeSelectorRequirement matchExpressions = 1;
repeated NodeSelectorRequirement matchFields = 2;
}
// See k8s.io.api.core.v1.NodeSelectorRequirement.
message NodeSelectorRequirement {
string key = 1;
string operator = 2;
repeated string values = 3;
}
// See k8s.io.api.core.v1.ObjectFieldSelector.
message ObjectFieldSelector {
string apiVersion = 1;
string fieldPath = 2;
}
// From k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta.
message ObjectMeta {
string name = 5;
string namespace = 6;
}
// See k8s.io.autoscaling.v2beta2.ObjectMetricSource.
message ObjectMetricSource {
string metricName = 2 [deprecated = true];
IntOrString targetValue = 3 [deprecated = true];
k8s.io.apimachinery.pkg.apis.meta.v1.LabelSelector selector = 4 [deprecated = true];
IntOrString averageValue = 5 [deprecated = true];
// Type changes from CrossVersionObjectReference to ResourceMetricTarget in autoscaling v2beta2/v2 compared with v2beta1
// Change it to dynamic type to keep backward compatible
google.protobuf.Value target = 1;
CrossVersionObjectReference describedObject = 6;
MetricIdentifier metric = 8;
}
// See k8s.io.autoscaling.v2beta2.ObjectMetricStatus.
message ObjectMetricStatus {
MetricIdentifier metric = 1;
MetricValueStatus current = 2;
CrossVersionObjectReference describedObject = 3;
}
// See k8s.io.api.core.v1.PodAffinity.
message PodAffinity {
repeated PodAffinityTerm requiredDuringSchedulingIgnoredDuringExecution = 1;
repeated WeightedPodAffinityTerm preferredDuringSchedulingIgnoredDuringExecution = 2;
}
// See k8s.io.api.core.v1.PodAntiAffinity.
message PodAntiAffinity {
repeated PodAffinityTerm requiredDuringSchedulingIgnoredDuringExecution = 1;
repeated WeightedPodAffinityTerm preferredDuringSchedulingIgnoredDuringExecution = 2;
}
// See k8s.io.api.core.v1.PodAntiAffinity.
message PodAffinityTerm {
k8s.io.apimachinery.pkg.apis.meta.v1.LabelSelector labelSelector = 1;
repeated string namespaces = 2;
string topologyKey = 3;
}
// See k8s.io.api.policy.v1beta1.PodDisruptionBudget.
message PodDisruptionBudgetSpec {
IntOrString minAvailable = 1;
k8s.io.apimachinery.pkg.apis.meta.v1.LabelSelector selector = 2;
IntOrString maxUnavailable = 3;
}
// See k8s.io.autoscaling.v2beta2.PodsMetricSource.
message PodsMetricSource {
string metricName = 1 [deprecated = true];
IntOrString targetAverageValue = 2 [deprecated = true];
k8s.io.apimachinery.pkg.apis.meta.v1.LabelSelector selector = 3 [deprecated = true];
// v2beta2/v2 fields
MetricIdentifier metric = 4;
MetricTarget target = 5;
}
// See k8s.io.autoscaling.v2beta2.PodsMetricStatus.
message PodsMetricStatus {
MetricIdentifier metric = 1;
MetricValueStatus current = 2;
}
// See k8s.io.api.core.v1.PreferredSchedulingTerm.
message PreferredSchedulingTerm {
int32 weight = 1;
NodeSelectorTerm preference = 2;
}
// See k8s.io.api.core.v1.ReadinessProbe.
message ReadinessProbe {
ExecAction exec = 1;
HTTPGetAction httpGet = 2;
TCPSocketAction tcpSocket = 3;
int32 initialDelaySeconds = 4;
int32 timeoutSeconds = 5;
int32 periodSeconds = 6;
int32 successThreshold = 7;
int32 failureThreshold = 8;
}
// See k8s.io.api.core.v1..
message ResourceFieldSelector {
string containerName = 1;
string resource = 2;
IntOrString divisor = 3;
}
// See k8s.io.autoscaling.v2beta2.ResourceMetricSource.
message ResourceMetricSource {
string name = 1;
int32 targetAverageUtilization = 2 [deprecated = true];
IntOrString targetAverageValue = 3 [deprecated = true];
MetricTarget target = 4;
}
// See k8s.io.autoscaling.v2beta2.ResourceMetricStatus.
message ResourceMetricStatus {
string name = 1;
MetricValueStatus current = 2;
}
// See k8s.io.api.core.v1.ResourceRequirements.
message Resources {
map<string, string> limits = 1;
map<string, string> requests = 2;
}
// See k8s.io.api.apps.v1.RollingUpdateDeployment.
message RollingUpdateDeployment {
IntOrString maxUnavailable = 1;
IntOrString maxSurge = 2;
}
// See k8s.io.api.core.v1.SecretKeySelector.
message SecretKeySelector {
LocalObjectReference localObjectReference = 1;
string key = 2;
bool optional = 3;
}
// See k8s.io.api.core.v1.ServiceSpec.
message ServiceSpec {
repeated ServicePort ports = 1;
map<string, string> selector = 2;
string clusterIP = 3;
string type = 4;
repeated string externalIPs = 5;
string sessionAffinity = 7;
string loadBalancerIP = 8;
repeated string loadBalancerSourceRanges = 9;
string externalName = 10;
string externalTrafficPolicy = 11;
int32 healthCheckNodePort = 12;
bool publishNotReadyAddresses = 13;
SessionAffinityConfig sessionAffinityConfig = 14;
string loadBalancerClass = 15;
}
// See k8s.io.api.core.v1..
message ServicePort {
string name = 1;
string protocol = 2;
int32 port = 3;
IntOrString targetPort = 4;
int32 nodePort = 5;
string appProtocol = 6;
}
// See k8s.io.api.core.v1.SessionAffinityConfig.
message SessionAffinityConfig {
ClientIPConfig clientIP = 1;
}
// See k8s.io.api.core.v1.TCPSocketAction.
message TCPSocketAction {
IntOrString port = 1;
string host = 2;
}
// See k8s.io.api.core.v1.Toleration.
message Toleration {
string key = 1;
string operator = 2;
string value = 3;
string effect = 4;
int64 tolerationSeconds = 5;
}
// See k8s.io.api.core.v1.WeightedPodAffinityTerm.
message WeightedPodAffinityTerm {
int32 weight = 1;
PodAffinityTerm podAffinityTerm = 2;
}
// See k8s.io.api.core.v1.PodSecurityContext.
message PodSecurityContext {
SELinuxOptions seLinuxOptions = 1;
int64 runAsUser = 2;
bool runAsNonRoot = 3;
repeated int64 supplementalGroups = 4;
int64 fsGroup = 5;
int64 runAsGroup = 6;
repeated Sysctl sysctls = 7;
WindowsSecurityContextOptions windowsOptions = 8;
string fsGroupChangePolicy = 9;
SeccompProfile seccompProfile = 10;
}
// See k8s.io.api.core.v1.SELinuxOptions.
message SELinuxOptions {
string user = 1;
string role = 2;
string type = 3;
string level = 4;
}
// See k8s.io.api.core.v1.Sysctl.
message Sysctl {
string name = 1;
string value = 2;
}
// See k8s.io.api.core.v1.WindowsSecurityContextOptions.
message WindowsSecurityContextOptions {
string gmsaCredentialSpecName = 1;
string gmsaCredentialSpec = 2;
string runAsUserName = 3;
}
// See k8s.io.api.core.v1.SeccompProfile.
message SeccompProfile {
string type = 1;
string localhostProfile = 2;
}
// IntOrString is a type that can hold an int32 or a string. When used in
// JSON or YAML marshalling and unmarshalling, it produces or consumes the
// inner type. This allows you to have, for example, a JSON field that can
// accept a name or number.
message IntOrString {
int64 type = 1;
google.protobuf.Int32Value intVal = 2;
google.protobuf.StringValue strVal = 3;
}