Andrey Smirnov 862c76001b
feat: add support for CoreDNS forwarding to host DNS
This PR adds the support for CoreDNS forwarding to host DNS. We try to bind on 9th address on the first element from
`serviceSubnets` and create a simple service so k8s will not attempt to rebind it.

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
Co-authored-by: Dmitriy Matrenichev <dmitry.matrenichev@siderolabs.com>
Signed-off-by: Dmitriy Matrenichev <dmitry.matrenichev@siderolabs.com>
2024-04-03 23:36:17 +03:00

256 lines
6.9 KiB
Protocol Buffer
Executable File

syntax = "proto3";
package talos.resource.definitions.k8s;
option go_package = "github.com/siderolabs/talos/pkg/machinery/api/resource/definitions/k8s";
import "common/common.proto";
import "google/protobuf/struct.proto";
import "resource/definitions/proto/proto.proto";
// APIServerConfigSpec is configuration for kube-apiserver.
message APIServerConfigSpec {
string image = 1;
string cloud_provider = 2;
string control_plane_endpoint = 3;
repeated string etcd_servers = 4;
int64 local_port = 5;
repeated string service_cid_rs = 6;
map<string, string> extra_args = 7;
repeated ExtraVolume extra_volumes = 8;
map<string, string> environment_variables = 9;
bool pod_security_policy_enabled = 10;
string advertised_address = 11;
Resources resources = 12;
}
// AdmissionControlConfigSpec is configuration for kube-apiserver.
message AdmissionControlConfigSpec {
repeated AdmissionPluginSpec config = 1;
}
// AdmissionPluginSpec is a single admission plugin configuration Admission Control plugins.
message AdmissionPluginSpec {
string name = 1;
google.protobuf.Struct configuration = 2;
}
// AuditPolicyConfigSpec is audit policy configuration for kube-apiserver.
message AuditPolicyConfigSpec {
google.protobuf.Struct config = 1;
}
// BootstrapManifestsConfigSpec is configuration for bootstrap manifests.
message BootstrapManifestsConfigSpec {
string server = 1;
string cluster_domain = 2;
repeated string pod_cid_rs = 3;
bool proxy_enabled = 4;
string proxy_image = 5;
repeated string proxy_args = 6;
bool core_dns_enabled = 7;
string core_dns_image = 8;
string dns_service_ip = 9;
string dns_service_i_pv6 = 10;
bool flannel_enabled = 11;
string flannel_image = 12;
string flannel_cni_image = 13;
bool pod_security_policy_enabled = 14;
bool talos_api_service_enabled = 15;
repeated string flannel_extra_args = 16;
string flannel_kube_service_host = 17;
string flannel_kube_service_port = 18;
string service_host_dns_address = 19;
}
// ConfigStatusSpec describes status of rendered secrets.
message ConfigStatusSpec {
bool ready = 1;
string version = 2;
}
// ControllerManagerConfigSpec is configuration for kube-controller-manager.
message ControllerManagerConfigSpec {
bool enabled = 1;
string image = 2;
string cloud_provider = 3;
repeated string pod_cid_rs = 4;
repeated string service_cid_rs = 5;
map<string, string> extra_args = 6;
repeated ExtraVolume extra_volumes = 7;
map<string, string> environment_variables = 8;
Resources resources = 9;
}
// EndpointSpec describes status of rendered secrets.
message EndpointSpec {
repeated common.NetIP addresses = 1;
}
// ExtraManifest defines a single extra manifest to download.
message ExtraManifest {
string name = 1;
string url = 2;
string priority = 3;
map<string, string> extra_headers = 4;
string inline_manifest = 5;
}
// ExtraManifestsConfigSpec is configuration for extra bootstrap manifests.
message ExtraManifestsConfigSpec {
repeated ExtraManifest extra_manifests = 1;
}
// ExtraVolume is a configuration of extra volume.
message ExtraVolume {
string name = 1;
string host_path = 2;
string mount_path = 3;
bool read_only = 4;
}
// KubePrismConfigSpec describes KubePrismConfig data.
message KubePrismConfigSpec {
string host = 1;
int64 port = 2;
repeated KubePrismEndpoint endpoints = 3;
}
// KubePrismEndpoint holds data for control plane endpoint.
message KubePrismEndpoint {
string host = 1;
uint32 port = 2;
}
// KubePrismEndpointsSpec describes KubePrismEndpoints configuration.
message KubePrismEndpointsSpec {
repeated KubePrismEndpoint endpoints = 1;
}
// KubePrismStatusesSpec describes KubePrismStatuses data.
message KubePrismStatusesSpec {
string host = 1;
bool healthy = 2;
}
// KubeletConfigSpec holds the source of kubelet configuration.
message KubeletConfigSpec {
string image = 1;
repeated string cluster_dns = 2;
string cluster_domain = 3;
map<string, string> extra_args = 4;
repeated talos.resource.definitions.proto.Mount extra_mounts = 5;
google.protobuf.Struct extra_config = 6;
bool cloud_provider_external = 7;
bool default_runtime_seccomp_enabled = 8;
bool skip_node_registration = 9;
string static_pod_list_url = 10;
bool disable_manifests_directory = 11;
bool enable_fs_quota_monitoring = 12;
google.protobuf.Struct credential_provider_config = 13;
}
// KubeletSpecSpec holds the source of kubelet configuration.
message KubeletSpecSpec {
string image = 1;
repeated string args = 2;
repeated talos.resource.definitions.proto.Mount extra_mounts = 3;
string expected_nodename = 4;
google.protobuf.Struct config = 5;
google.protobuf.Struct credential_provider_config = 6;
}
// ManifestSpec holds the Kubernetes resources spec.
message ManifestSpec {
repeated SingleManifest items = 1;
}
// ManifestStatusSpec describes manifest application status.
message ManifestStatusSpec {
repeated string manifests_applied = 1;
}
// NodeIPConfigSpec holds the Node IP specification.
message NodeIPConfigSpec {
repeated string valid_subnets = 1;
repeated string exclude_subnets = 2;
}
// NodeIPSpec holds the Node IP specification.
message NodeIPSpec {
repeated common.NetIP addresses = 1;
}
// NodeLabelSpecSpec represents a label that's attached to a Talos node.
message NodeLabelSpecSpec {
string key = 1;
string value = 2;
}
// NodeStatusSpec describes Kubernetes NodeStatus.
message NodeStatusSpec {
string nodename = 1;
bool node_ready = 2;
bool unschedulable = 3;
map<string, string> labels = 4;
map<string, string> annotations = 5;
}
// NodeTaintSpecSpec represents a label that's attached to a Talos node.
message NodeTaintSpecSpec {
string key = 1;
string effect = 2;
string value = 3;
}
// NodenameSpec describes Kubernetes nodename.
message NodenameSpec {
string nodename = 1;
string hostname_version = 2;
bool skip_node_registration = 3;
}
// Resources is a configuration of cpu and memory resources.
message Resources {
map<string, string> requests = 1;
map<string, string> limits = 2;
}
// SchedulerConfigSpec is configuration for kube-scheduler.
message SchedulerConfigSpec {
bool enabled = 1;
string image = 2;
map<string, string> extra_args = 3;
repeated ExtraVolume extra_volumes = 4;
map<string, string> environment_variables = 5;
Resources resources = 6;
google.protobuf.Struct config = 7;
}
// SecretsStatusSpec describes status of rendered secrets.
message SecretsStatusSpec {
bool ready = 1;
string version = 2;
}
// SingleManifest is a single manifest.
message SingleManifest {
google.protobuf.Struct object = 1;
}
// StaticPodServerStatusSpec describes static pod spec, it contains marshaled *v1.Pod spec.
message StaticPodServerStatusSpec {
string url = 1;
}
// StaticPodSpec describes static pod spec, it contains marshaled *v1.Pod spec.
message StaticPodSpec {
google.protobuf.Struct pod = 1;
}
// StaticPodStatusSpec describes kubelet static pod status.
message StaticPodStatusSpec {
google.protobuf.Struct pod_status = 1;
}