Documentation
¶
Index ¶
Constants ¶
const DeadNodeAppenderName = "deadNode"
const IstioAppenderName = "istio"
const (
// ResponseTimeAppenderName uniquely identifies the appender: responseTime
ResponseTimeAppenderName = "responseTime"
)
const (
SecurityPolicyAppenderName = "securityPolicy"
)
const ServiceEntryAppenderName = "serviceEntry"
const SidecarsCheckAppenderName = "sidecarsCheck"
const UnusedNodeAppenderName = "unusedNode"
Variables ¶
This section is empty.
Functions ¶
func ParseAppenders ¶
func ParseAppenders(o graph.TelemetryOptions) []graph.Appender
ParseAppenders determines which appenders should run for this graphing request
Types ¶
type DeadNodeAppender ¶
type DeadNodeAppender struct{}
DeadNodeAppender is responsible for removing from the graph unwanted nodes:
- nodes for which there is no traffic reported and a backing workload that can't be found (presumably removed from K8S). (kiali-621)
- this includes "unknown"
- service nodes that are not service entries (kiali-1526) and for which there is no incoming error traffic and no outgoing edges (kiali-1326).
Name: deadNode
func (DeadNodeAppender) AppendGraph ¶
func (a DeadNodeAppender) AppendGraph(trafficMap graph.TrafficMap, globalInfo *graph.AppenderGlobalInfo, namespaceInfo *graph.AppenderNamespaceInfo)
AppendGraph implements Appender
type IstioAppender ¶
type IstioAppender struct{}
IstioAppender is responsible for badging nodes with special Istio significance: - CircuitBreaker: n.Metadata[HasCB] = true - VirtualService: n.Metadata[HasVS] = true Name: istio
func (IstioAppender) AppendGraph ¶
func (a IstioAppender) AppendGraph(trafficMap graph.TrafficMap, globalInfo *graph.AppenderGlobalInfo, namespaceInfo *graph.AppenderNamespaceInfo)
AppendGraph implements Appender
type PolicyRates ¶
type ResponseTimeAppender ¶
type ResponseTimeAppender struct {
GraphType string
InjectServiceNodes bool
Namespaces graph.NamespaceInfoMap
Quantile float64
QueryTime int64 // unix time in seconds
}
ResponseTimeAppender is responsible for adding responseTime information to the graph. ResponseTime is represented as a percentile value. The default is 95th percentile, which means that 95% of requests executed in no more than the resulting milliseconds. ResponeTime values are reported in milliseconds. Name: responseTime
func (ResponseTimeAppender) AppendGraph ¶
func (a ResponseTimeAppender) AppendGraph(trafficMap graph.TrafficMap, globalInfo *graph.AppenderGlobalInfo, namespaceInfo *graph.AppenderNamespaceInfo)
AppendGraph implements Appender
func (ResponseTimeAppender) Name ¶
func (a ResponseTimeAppender) Name() string
Name implements Appender
type SecurityPolicyAppender ¶
type SecurityPolicyAppender struct {
GraphType string
InjectServiceNodes bool
Namespaces map[string]graph.NamespaceInfo
QueryTime int64 // unix time in seconds
}
SecurityPolicyAppender is responsible for adding securityPolicy information to the graph. The appender currently reports only mutual_tls security although is written in a generic way. Name: securityPolicy
func (SecurityPolicyAppender) AppendGraph ¶
func (a SecurityPolicyAppender) AppendGraph(trafficMap graph.TrafficMap, globalInfo *graph.AppenderGlobalInfo, namespaceInfo *graph.AppenderNamespaceInfo)
AppendGraph implements Appender
func (SecurityPolicyAppender) Name ¶
func (a SecurityPolicyAppender) Name() string
Name implements Appender
type ServiceEntryAppender ¶
type ServiceEntryAppender struct {
AccessibleNamespaces map[string]time.Time
GraphType string // This appender does not operate on service graphs because it adds workload nodes.
}
ServiceEntryAppender is responsible for identifying service nodes that are defined in Istio as a serviceEntry. A single serviceEntry can define multiple hosts and as such multiple service nodes may map to different hosts of a single serviceEntry. We'll call these "se-service" nodes. The appender handles this in the following way:
For Each "se-service" node
if necessary, create an aggregate serviceEntry node ("se-aggregate")
-- an "se-aggregate" is a service node with isServiceEntry set in the metadata
-- an "se-aggregate" is namespace-specific. This can lead to mutiple serviceEntry nodes
in a multi-namespace graph. This makes some sense because serviceEntries are "exported"
to individual namespaces.
aggregate the "se-service" node into the "se-aggregate" node
-- incoming edges
-- outgoing edges (unusual but can have outgoing edge to egress gateway)
-- per-host traffic (in the metadata)
remove the "se-service" node from the trafficMap
add any new "se-aggregate" node to the trafficMap
Doc Links - https://istio.io/docs/reference/config/networking/v1alpha3/service-entry/#ServiceEntry - https://istio.io/docs/examples/advanced-gateways/wildcard-egress-hosts/
A note about wildcard hosts. External service entries allow for prefix wildcarding such that many different service requests may be handled by the same service entry definition. For example, host = *.wikipedia.com would match requests for en.wikipedia.com and de.wikipedia.com. The Istio telemetry produces only one "se-service" node with the wilcard host as the destination_service_name.
func (ServiceEntryAppender) AppendGraph ¶
func (a ServiceEntryAppender) AppendGraph(trafficMap graph.TrafficMap, globalInfo *graph.AppenderGlobalInfo, namespaceInfo *graph.AppenderNamespaceInfo)
AppendGraph implements Appender
func (ServiceEntryAppender) Name ¶
func (a ServiceEntryAppender) Name() string
Name implements Appender
type SidecarsCheckAppender ¶
type SidecarsCheckAppender struct{}
SidecarsCheckAppender flags nodes whose backing workloads are missing at least one Envoy sidecar. Note that a node with no backing workloads is not flagged. Name: sidecarsCheck
func (SidecarsCheckAppender) AppendGraph ¶
func (a SidecarsCheckAppender) AppendGraph(trafficMap graph.TrafficMap, globalInfo *graph.AppenderGlobalInfo, namespaceInfo *graph.AppenderNamespaceInfo)
AppendGraph implements Appender
func (SidecarsCheckAppender) Name ¶
func (a SidecarsCheckAppender) Name() string
Name implements Appender
type UnusedNodeAppender ¶
type UnusedNodeAppender struct {
GraphType string
InjectServiceNodes bool // This appender addes unused services only when service node are injected or graphType=service
IsNodeGraph bool // This appender does not operate on node detail graphs because we want to focus on the specific node.
}
UnusedNodeAppender looks for services that have never seen request traffic. It adds nodes to represent the unused definitions. The added node types depend on the graph type and/or labeling on the definition. Name: unusedNode
func (UnusedNodeAppender) AppendGraph ¶
func (a UnusedNodeAppender) AppendGraph(trafficMap graph.TrafficMap, globalInfo *graph.AppenderGlobalInfo, namespaceInfo *graph.AppenderNamespaceInfo)
AppendGraph implements Appender