blob: 04a4a0dcc313847a31673d162d60cab25fd8224b [file] [log] [blame]
syntax = "proto3";
package dubbo.mesh.v1alpha1;
option go_package = "github.com/apache/dubbo-kubernetes/api/mesh/v1alpha1";
import "api/mesh/options.proto";
import "google/protobuf/duration.proto";
import "google/protobuf/wrappers.proto";
import "api/mesh/v1alpha1/metrics.proto";
import "api/mesh/v1alpha1/envoy_admin.proto";
import "validate/validate.proto";
// Dataplane defines configuration of a side-car proxy.
message Dataplane {
option (dubbo.mesh.resource).name = "DataplaneResource";
option (dubbo.mesh.resource).type = "Dataplane";
option (dubbo.mesh.resource).package = "mesh";
option (dubbo.mesh.resource).dds.send_to_global = true;
option (dubbo.mesh.resource).ws.name = "dataplane";
option (dubbo.mesh.resource).ws.plural = "dataplanes";
option (dubbo.mesh.resource).scope_namespace = true;
option (dubbo.mesh.resource).allow_to_inspect = true;
// Networking describes inbound and outbound interfaces of a data plane proxy.
message Networking {
// IP on which the data plane proxy is accessible to the control plane and
// other data plane proxies in the same network. This can also be a
// hostname, in which case the control plane will periodically resolve it.
string address = 5;
reserved 6; // Formerly ingress mode message, see #3435
// In some situations, a data plane proxy resides in a private network (e.g.
// Docker) and is not reachable via `address` to other data plane proxies.
// `advertisedAddress` is configured with a routable address for such data
// plane proxy so that other proxies in the mesh can connect to it over
// `advertisedAddress` and not via address.
//
// Envoy still binds to the `address`, not `advertisedAddress`.
string advertisedAddress = 7;
// Inbound describes a service implemented by the data plane proxy.
// All incoming traffic to a data plane proxy are going through inbound
// listeners. For every defined Inbound there is a corresponding Envoy
// Listener.
message Inbound {
// Port of the inbound interface that will forward requests to the
// service.
//
// When transparent proxying is used, it is a port on which the service is
// listening to. When transparent proxying is not used, Envoy will bind to
// this port.
uint32 port = 3;
// Port of the service that requests will be forwarded to.
// Defaults to the same value as `port`.
uint32 servicePort = 4;
// Address of the service that requests will be forwarded to.
// Defaults to 'inbound.address', since Dubbo DP should be deployed next
// to the service.
string serviceAddress = 6;
// Address on which inbound listener will be exposed.
// Defaults to `networking.address`.
string address = 5;
// Tags associated with an application this data plane proxy is deployed
// next to, e.g. `dubbo.io/service=web`, `version=1.0`. You can then
// reference these tags in policies like MeshTrafficPermission.
// `dubbo.io/service` tag is mandatory.
map<string, string> tags = 2 [ (validate.rules).map.min_pairs = 1 ];
// Health describes the status of an inbound
message Health {
// Ready indicates if the data plane proxy is ready to serve the
// traffic.
bool ready = 1;
}
// Health describes the status of an inbound.
// If 'health' is nil we consider data plane proxy as healthy.
// Unhealthy data plane proxies are excluded from Endpoints Discovery
// Service (EDS). On Kubernetes, it is filled automatically by the control
// plane if Pod has readiness probe configured. On Universal, it can be
// set by the external health checking system, but the most common way is
// to use service probes.
Health health = 7;
// ServiceProbe defines parameters for probing service's port
message ServiceProbe {
// Interval between consecutive health checks.
google.protobuf.Duration interval = 1;
// Maximum time to wait for a health check response.
google.protobuf.Duration timeout = 2;
// Number of consecutive unhealthy checks before considering a host
// unhealthy.
google.protobuf.UInt32Value unhealthy_threshold = 3;
// Number of consecutive healthy checks before considering a host
// healthy.
google.protobuf.UInt32Value healthy_threshold = 4;
message Tcp {}
// Tcp checker tries to establish tcp connection with destination
Tcp tcp = 5;
}
// ServiceProbe defines parameters for probing the service next to
// sidecar. When service probe is defined, Envoy will periodically health
// check the application next to it and report the status to the control
// plane. On Kubernetes, Dubbo deployments rely on Kubernetes probes so
// this is not used.
ServiceProbe serviceProbe = 8;
enum State {
// Inbound is ready to serve the traffic.
Ready = 0;
// Inbound is not ready to serve the traffic.
NotReady = 1;
// Inbound is not created. It cannot be targeted by policies.
// However, a data plane proxy receives a certificate with identity of
// this inbound.
Ignored = 2;
}
// State describes the current state of the listener.
State state = 9;
}
// Outbound describes a service consumed by the data plane proxy.
// For every defined Outbound there is a corresponding Envoy Listener.
message Outbound {
// IP on which the consumed service will be available to this data plane
// proxy. On Kubernetes, it's usually ClusterIP of a Service or PodIP of a
// Headless Service. Defaults to 127.0.0.1
string address = 3;
// Port on which the consumed service will be available to this data plane
// proxy. When transparent proxying is not used, Envoy will bind to this
// port.
uint32 port = 4;
// Tags of consumed data plane proxies.
// `dubbo.io/service` tag is required.
// These tags can then be referenced in `destinations` section of policies
// like TrafficRoute or in `to` section in policies like MeshAccessLog. It
// is recommended to only use `dubbo.io/service`. If you need to consume
// specific data plane proxy of a service (for example: `version=v2`) the
// better practice is to use TrafficRoute.
map<string, string> tags = 5;
}
// Inbound describes a list of inbound interfaces of the data plane proxy.
//
// Inbound describes a service implemented by the data plane proxy.
// All incoming traffic to a data plane proxy is going through inbound
// listeners. For every defined Inbound there is a corresponding Envoy
// Listener.
repeated Inbound inbound = 1;
// Outbound describes a list of services consumed by the data plane proxy.
// For every defined Outbound, there is a corresponding Envoy Listener.
repeated Outbound outbound = 2;
// Admin describes configuration related to Envoy Admin API.
// Due to security, all the Envoy Admin endpoints are exposed only on
// localhost. Additionally, Envoy will expose `/ready` endpoint on
// `networking.address` for health checking systems to be able to check the
// state of Envoy. The rest of the endpoints exposed on `networking.address`
// are always protected by mTLS and only meant to be consumed internally by
// the control plane.
EnvoyAdmin admin = 8;
}
// Networking describes inbound and outbound interfaces of the data plane
// proxy.
Networking networking = 1;
// Configuration for metrics that should be collected and exposed by the
// data plane proxy.
//
// Settings defined here will override their respective defaults
// defined at a Mesh level.
MetricsBackend metrics = 2;
message Probes {
// Port on which the probe endpoints will be exposed. This cannot overlap
// with any other ports.
uint32 port = 1;
message Endpoint {
// Inbound port is a port of the application from which we expose the
// endpoint.
uint32 inbound_port = 1;
// Inbound path is a path of the application from which we expose the
// endpoint. It is recommended to be as specific as possible.
string inbound_path = 2;
// Path is a path on which we expose inbound path on the probes port.
string path = 3;
}
// List of endpoints to expose without mTLS.
repeated Endpoint endpoints = 2;
}
// Probes describe a list of endpoints that will be exposed without mTLS.
// This is useful to expose the health endpoints of the application so the
// orchestration system (e.g. Kubernetes) can still health check the
// application.
Probes probes = 3;
map<string, string> extensions = 4;
}