istio

Форк
0
146 строк · 3.7 Кб
1
// Copyright Istio Authors
2
//
3
// Licensed under the Apache License, Version 2.0 (the "License");
4
// you may not use this file except in compliance with the License.
5
// You may obtain a copy of the License at
6
//
7
//     http://www.apache.org/licenses/LICENSE-2.0
8
//
9
// Unless required by applicable law or agreed to in writing, software
10
// distributed under the License is distributed on an "AS IS" BASIS,
11
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
// See the License for the specific language governing permissions and
13
// limitations under the License.
14

15
// Package common contains resource names, which may vary from version to version.
16
package common
17

18
import (
19
	"fmt"
20
	"strings"
21

22
	"istio.io/istio/pkg/log"
23
)
24

25
const (
26
	// latestKey is an arbitrary value that represents the fallback version (master).
27
	latestKey = "latest"
28

29
	ProxyContainerName     = "istio-proxy"
30
	DiscoveryContainerName = "discovery"
31
	OperatorContainerName  = "istio-operator"
32

33
	// namespaceAll is the default argument of across all namespaces
34
	NamespaceAll        = ""
35
	StrNamespaceAll     = "allNamespaces"
36
	KubeSystemNamespace = "kube-system"
37
)
38

39
type kv struct {
40
	k string
41
	v string
42
}
43

44
type resourceNames struct {
45
	discoveryLabels  []kv
46
	istioDebugURLs   []string
47
	proxyDebugURLs   []string
48
	ztunnelDebugURLs []string
49
}
50

51
var versionMap = map[string]*resourceNames{
52
	latestKey: {
53
		discoveryLabels: []kv{
54
			{k: "app", v: "istiod"},
55
		},
56
		istioDebugURLs: []string{
57
			"debug/adsz",
58
			"debug/authorizationz",
59
			"debug/cachez",
60
			"debug/clusterz",
61
			"debug/configz",
62
			"debug/endpointShardz",
63
			"debug/endpointz",
64
			"debug/inject",
65
			"debug/instancesz",
66
			"debug/mcsz",
67
			"debug/mesh",
68
			"debug/networkz",
69
			"debug/push_status",
70
			"debug/registryz",
71
			"debug/resourcesz",
72
			"debug/syncz",
73
			"debug/telemetryz",
74
			"metrics",
75
		},
76
		proxyDebugURLs: []string{
77
			"certs",
78
			"clusters",
79
			"config_dump?include_eds",
80
			"listeners",
81
			"memory",
82
			"server_info",
83
			"stats/prometheus",
84
			"runtime",
85
		},
86
		ztunnelDebugURLs: []string{
87
			"config_dump",
88
		},
89
	},
90
}
91

92
// IstiodDebugURLs returns a list of Istiod debug URLs for the given version.
93
func IstiodDebugURLs(clusterVersion string) []string {
94
	return versionMap[getVersionKey(clusterVersion)].istioDebugURLs
95
}
96

97
// ProxyDebugURLs returns a list of proxy debug URLs for the given version.
98
func ProxyDebugURLs(clusterVersion string) []string {
99
	return versionMap[getVersionKey(clusterVersion)].proxyDebugURLs
100
}
101

102
// ZtunnelDebugURLs returns a list of ztunnel debug URLs for the given version.
103
func ZtunnelDebugURLs(clusterVersion string) []string {
104
	return versionMap[getVersionKey(clusterVersion)].ztunnelDebugURLs
105
}
106

107
// IsDiscoveryContainer reports whether the given container is an Istio discovery container for the given version.
108
// Labels are the labels for the given pod.
109
func IsDiscoveryContainer(clusterVersion, container string, labels map[string]string) bool {
110
	if container != DiscoveryContainerName {
111
		return false
112
	}
113

114
	for _, kv := range versionMap[getVersionKey(clusterVersion)].discoveryLabels {
115
		if labels[kv.k] != kv.v {
116
			return false
117
		}
118
	}
119
	return true
120
}
121

122
// IsProxyContainer reports whether container is an istio proxy container.
123
func IsProxyContainer(_, container string) bool {
124
	return container == ProxyContainerName
125
}
126

127
// IsOperatorContainer reports whether the container is an istio-operator container.
128
func IsOperatorContainer(_, container string) bool {
129
	return container == OperatorContainerName
130
}
131

132
func IsCniPod(pod string) bool {
133
	return strings.HasPrefix(pod, "istio-cni-node")
134
}
135

136
func getVersionKey(clusterVersion string) string {
137
	if versionMap[clusterVersion] == nil {
138
		return latestKey
139
	}
140
	return clusterVersion
141
}
142

143
func LogAndPrintf(format string, a ...any) {
144
	fmt.Printf(format, a...)
145
	log.Info(fmt.Sprintf(format, a...))
146
}
147

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.