Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Q
qa-platform
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
QA
qa-platform
Commits
a261adc5
Commit
a261adc5
authored
Oct 28, 2021
by
黎博
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
新增/k8s/listEnvVars接口
parent
e5793847
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
193 additions
and
0 deletions
+193
-0
pom.xml
pom.xml
+7
-0
K8sController.java
...n/java/cn/qg/qaplatform/controller/k8s/K8sController.java
+33
-0
K8sService.java
src/main/java/cn/qg/qaplatform/utils/K8sService.java
+114
-0
kube-config.yml
src/main/resources/kube-config.yml
+18
-0
tke-cluster-ca.crt
src/main/resources/tke-cluster-ca.crt
+21
-0
No files found.
pom.xml
View file @
a261adc5
...
@@ -213,6 +213,13 @@
...
@@ -213,6 +213,13 @@
<version>
2.5.0
</version>
<version>
2.5.0
</version>
</dependency>
</dependency>
<!-- https://mvnrepository.com/artifact/io.fabric8/kubernetes-client -->
<dependency>
<groupId>
io.fabric8
</groupId>
<artifactId>
kubernetes-client
</artifactId>
<version>
5.4.1
</version>
</dependency>
</dependencies>
</dependencies>
<build>
<build>
...
...
src/main/java/cn/qg/qaplatform/controller/k8s/K8sController.java
0 → 100644
View file @
a261adc5
package
cn
.
qg
.
qaplatform
.
controller
.
k8s
;
import
cn.qg.qaplatform.utils.K8sService
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RequestParam
;
import
org.springframework.web.bind.annotation.RestController
;
import
java.util.HashMap
;
import
java.util.Map
;
@RestController
@RequestMapping
(
"/k8s"
)
public
class
K8sController
{
@Autowired
K8sService
k8sService
;
/**
* 获取k8s环境变量
* @param namespace 环境
* @return
*/
@GetMapping
(
"/listEnvVars"
)
public
Map
getListEnvVars
(
@RequestParam
String
namespace
)
{
Map
<
String
,
Object
>
detailMap
=
k8sService
.
getListEnvVars
(
namespace
);
Map
<
String
,
Object
>
resultMap
=
new
HashMap
<>();
resultMap
.
put
(
"details"
,
detailMap
);
resultMap
.
put
(
"success"
,
true
);
return
resultMap
;
}
}
src/main/java/cn/qg/qaplatform/utils/K8sService.java
0 → 100644
View file @
a261adc5
package
cn
.
qg
.
qaplatform
.
utils
;
import
io.fabric8.kubernetes.api.model.Pod
;
import
io.fabric8.kubernetes.api.model.Service
;
import
io.fabric8.kubernetes.api.model.ServicePort
;
import
io.fabric8.kubernetes.client.Config
;
import
io.fabric8.kubernetes.client.DefaultKubernetesClient
;
import
io.fabric8.kubernetes.client.KubernetesClient
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.core.io.ClassPathResource
;
import
org.springframework.stereotype.Component
;
import
java.io.BufferedReader
;
import
java.io.IOException
;
import
java.io.InputStream
;
import
java.io.InputStreamReader
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.TreeMap
;
@Slf4j
@Component
public
class
K8sService
{
private
KubernetesClient
kubernetesClient
;
public
K8sService
()
{
try
{
String
configYAML
=
String
.
join
(
"\n"
,
readConfigFile
(
"kube-config.yml"
));
Config
config
=
Config
.
fromKubeconfig
(
configYAML
);
kubernetesClient
=
new
DefaultKubernetesClient
(
config
);
String
configCrt
=
String
.
join
(
"\n"
,
readConfigFile
(
"tke-cluster-ca.crt"
));
config
.
setCaCertData
(
configCrt
);
log
.
info
(
"k8s连接初始化成功!"
);
}
catch
(
Exception
e
)
{
log
.
info
(
"k8s service 初始化失败!"
);
e
.
printStackTrace
();
}
}
/**
* 读取k8s配置文件
* @param file 配置文件名
* @return
* @throws IOException
*/
private
static
List
<
String
>
readConfigFile
(
String
file
)
throws
IOException
{
String
str
=
""
;
ClassPathResource
resource
=
new
ClassPathResource
(
file
);
InputStream
in
=
resource
.
getInputStream
();
BufferedReader
br
=
new
BufferedReader
(
new
InputStreamReader
(
in
));
List
<
String
>
result
=
new
ArrayList
<>();
while
((
str
=
br
.
readLine
())
!=
null
)
{
result
.
add
(
str
);
}
return
result
;
}
/**
* 获取环境的所有k8s变量
* @param namespace 环境
*/
public
Map
<
String
,
Object
>
getListEnvVars
(
String
namespace
)
{
Map
<
String
,
Object
>
envMap
=
new
TreeMap
<>();
List
<
Pod
>
podList
=
kubernetesClient
.
pods
().
inNamespace
(
namespace
).
list
().
getItems
();
List
<
Service
>
serviceList
=
kubernetesClient
.
services
().
inNamespace
(
namespace
).
list
().
getItems
();
// 遍历Pod列表
for
(
Pod
pod:
podList
)
{
if
(!
pod
.
getStatus
().
getPhase
().
equals
(
"Failed"
))
{
String
serviceName
=
pod
.
getMetadata
().
getLabels
().
get
(
"qcloud-app"
);
serviceName
=
serviceName
.
replace
(
"-"
,
"_"
).
toUpperCase
();
envMap
.
put
(
serviceName
+
"_SERVICE_HOST"
,
pod
.
getStatus
().
getHostIP
());
// MYSQL需要额外加个参数
if
(
serviceName
.
equals
(
"MYSQL"
))
{
envMap
.
put
(
"DB_SERVICE_HOST"
,
pod
.
getStatus
().
getHostIP
());
}
}
}
// 遍历Service列表
for
(
Service
service:
serviceList
)
{
String
serviceName
=
service
.
getMetadata
().
getName
().
toUpperCase
().
replaceAll
(
"-"
,
"_"
);
List
<
ServicePort
>
servicePortList
=
service
.
getSpec
().
getPorts
();
if
(
service
.
getMetadata
().
getLabels
().
get
(
"type"
).
equals
(
"base"
))
{
if
(
servicePortList
.
get
(
0
).
getPort
()
!=
null
)
{
envMap
.
put
(
serviceName
+
"_SERVICE_PORT"
,
servicePortList
.
get
(
0
).
getNodePort
());
// MYSQL需要额外加个参数
if
(
serviceName
.
equals
(
"MYSQL"
))
{
envMap
.
put
(
"DB_SERVICE_PORT"
,
servicePortList
.
get
(
0
).
getNodePort
());
}
}
for
(
ServicePort
servicePort:
servicePortList
)
{
envMap
.
put
(
serviceName
+
"_SERVICE_PORT_"
+
servicePort
.
getPort
(),
servicePort
.
getNodePort
());
// MYSQL需要额外加个参数
if
(
serviceName
.
equals
(
"MYSQL"
))
{
envMap
.
put
(
"DB_SERVICE_PORT_"
+
servicePort
.
getPort
(),
servicePort
.
getNodePort
());
}
}
}
else
{
if
(
servicePortList
.
get
(
0
).
getNodePort
()
!=
null
)
{
envMap
.
put
(
serviceName
+
"_SERVICE_PORT"
,
servicePortList
.
get
(
0
).
getNodePort
());
}
for
(
ServicePort
servicePort:
servicePortList
)
{
if
(
service
.
getSpec
().
getType
().
equals
(
"NodePort"
))
{
envMap
.
put
(
serviceName
+
"_SERVICE_PORT_"
+
servicePort
.
getPort
(),
servicePort
.
getNodePort
());
}
else
if
(
service
.
getSpec
().
getType
().
equals
(
"ClusterIP"
))
{
envMap
.
put
(
serviceName
+
"_SERVICE_PORT_"
+
servicePort
.
getName
(),
servicePort
.
getPort
());
}
}
}
}
return
envMap
;
}
}
src/main/resources/kube-config.yml
0 → 100644
View file @
a261adc5
apiVersion
:
v1
clusters
:
-
cluster
:
certificate-authority-data
:
LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURaRENDQWt5Z0F3SUJBZ0lJQWlFbzhnb1ZhZVl3RFFZSktvWklodmNOQVFFTEJRQXdVREVMTUFrR0ExVUUKQmhNQ1EwNHhLakFSQmdOVkJBb1RDblJsYm1ObGJuUjVkVzR3RlFZRFZRUUtFdzV6ZVhOMFpXMDZiV0Z6ZEdWeQpjekVWTUJNR0ExVUVBeE1NWTJ4ekxXRmpabmcwY0hacU1CNFhEVEU1TURFd016QXpNRFExTWxvWERUTTVNREV3Ck16QXpNRFExTWxvd1VERUxNQWtHQTFVRUJoTUNRMDR4S2pBUkJnTlZCQW9UQ25SbGJtTmxiblI1ZFc0d0ZRWUQKVlFRS0V3NXplWE4wWlcwNmJXRnpkR1Z5Y3pFVk1CTUdBMVVFQXhNTVkyeHpMV0ZqWm5nMGNIWnFNSUlCSWpBTgpCZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUE1UnVyS0hSMG5GMlAyNndlU01haittbXltdytsCkEvODFyNUl3QVFZaXoxSDRRT3IrVFdiZjd0Z2JsWXNOemJpSk5qTk56VkRiQ2RidkhZaHhLNlVjemJDOGJocXEKakE4Y29tcCtkbENlNm13VEJKNzRwM08rSlduNFJOY0QreHJ4dXJ6aE9GRFZra1RrRWNqMDZXT25oMk9Dc0VaQwpCeVczWlBYQ2p1ZG8wNUprTUhXaEUvcERmSWEyYWIxNmRZeGZ2SWhzdjhYcWdRMm92T0RvOEg5aVBmWkMvVkl4CmpoUWtPem1SbmRlRXgvWlpiWTlvMW9PbWwxcjl3ZnRXWklzWTJYbTY0SzRrVDg3YWZURi9xaXZ4OEdXOXBwRHkKb3JZVlhnVVFKVkRHMmIyWXdGYldYdlB3SzZZYlNVOUdydUplUnFmdklLaSt3S3RxQzBMZ1pZckxVd0lEQVFBQgpvMEl3UURBT0JnTlZIUThCQWY4RUJBTUNBb1F3SFFZRFZSMGxCQll3RkFZSUt3WUJCUVVIQXdJR0NDc0dBUVVGCkJ3TUJNQThHQTFVZEV3RUIvd1FGTUFNQkFmOHdEUVlKS29aSWh2Y05BUUVMQlFBRGdnRUJBRi9jYzF0RGZUSFEKeDVyRmpyUEt5YW5xOWJWb2YySlorMnhiaHp1b2sxU2ljYlNwdExia0h4VDh6cmlVeHNQM3djbFluSVFtN25XNgo5VEl6S1hJOUgra3ZFbDNQQXZyU1VVRnFOSytLWlBEZFpQdnNvcFZ1dDNtc3ZQeWRnNGRlODgzd0EwSmQ1dWl1CjNKV0xBYm1hekhZT01taEQyRW9yc1VpWTZ3NXVJNy9rMld6bUgzelVGd250WDRNMjFYR3JrZm5IUUVhVHQvaHQKR3JsUWpQVzgwNzFwSm9UaVgxNURzd2VNTS9KZEtMV3FTaHVJdWY3YXNqcFUrSWRtQjU3U0g3NER0eTNEaTU4QwpHVldBQjEzc3BtZGpIbGhDeTlRZGxpQzhkUzVGai80SFRIdDJHYTBDREZLRVk0TnF3SGUvK0hqNmRWOTJrcmJHCmdaNkZRa2FId1ZrPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==
server
:
https://cls-acfx4pvj.ccs.tencent-cloud.com
name
:
local
contexts
:
-
context
:
cluster
:
local
user
:
admin
name
:
cls-acfx4pvj-context-default
current-context
:
cls-acfx4pvj-context-default
kind
:
Config
preferences
:
{}
users
:
-
name
:
admin
user
:
token
:
BIsuBv18csrBHVXClYZ4ln3izUYJt9Xa
\ No newline at end of file
src/main/resources/tke-cluster-ca.crt
0 → 100644
View file @
a261adc5
-----BEGIN CERTIFICATE-----
MIIDZDCCAkygAwIBAgIIAiEo8goVaeYwDQYJKoZIhvcNAQELBQAwUDELMAkGA1UE
BhMCQ04xKjARBgNVBAoTCnRlbmNlbnR5dW4wFQYDVQQKEw5zeXN0ZW06bWFzdGVy
czEVMBMGA1UEAxMMY2xzLWFjZng0cHZqMB4XDTE5MDEwMzAzMDQ1MloXDTM5MDEw
MzAzMDQ1MlowUDELMAkGA1UEBhMCQ04xKjARBgNVBAoTCnRlbmNlbnR5dW4wFQYD
VQQKEw5zeXN0ZW06bWFzdGVyczEVMBMGA1UEAxMMY2xzLWFjZng0cHZqMIIBIjAN
BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5RurKHR0nF2P26weSMaj+mmymw+l
A/81r5IwAQYiz1H4QOr+TWbf7tgblYsNzbiJNjNNzVDbCdbvHYhxK6UczbC8bhqq
jA8comp+dlCe6mwTBJ74p3O+JWn4RNcD+xrxurzhOFDVkkTkEcj06WOnh2OCsEZC
ByW3ZPXCjudo05JkMHWhE/pDfIa2ab16dYxfvIhsv8XqgQ2ovODo8H9iPfZC/VIx
jhQkOzmRndeEx/ZZbY9o1oOml1r9wftWZIsY2Xm64K4kT87afTF/qivx8GW9ppDy
orYVXgUQJVDG2b2YwFbWXvPwK6YbSU9GruJeRqfvIKi+wKtqC0LgZYrLUwIDAQAB
o0IwQDAOBgNVHQ8BAf8EBAMCAoQwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUF
BwMBMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAF/cc1tDfTHQ
x5rFjrPKyanq9bVof2JZ+2xbhzuok1SicbSptLbkHxT8zriUxsP3wclYnIQm7nW6
9TIzKXI9H+kvEl3PAvrSUUFqNK+KZPDdZPvsopVut3msvPydg4de883wA0Jd5uiu
3JWLAbmazHYOMmhD2EorsUiY6w5uI7/k2WzmH3zUFwntX4M21XGrkfnHQEaTt/ht
GrlQjPW8071pJoTiX15DsweMM/JdKLWqShuIuf7asjpU+IdmB57SH74Dty3Di58C
GVWAB13spmdjHlhCy9QdliC8dS5Fj/4HTHt2Ga0CDFKEY4NqwHe/+Hj6dV92krbG
gZ6FQkaHwVk=
-----END CERTIFICATE-----
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment