我遇到的问题
问题1
linux主机上kubectl 访问腾讯云集群没有问题, linux主机上安装的jenkins启动的一个docker容器上用kubectl访问就报连接超时
ping只能ping通IP,在docker容器中可以带IP去ping,是因为容器帮忙直接把端口去掉了。
在linux主机上ping 域名(不要带https:),可以看到经过dns解析的内网IP地址 10.132.18.116 ping cls-igajfhjz.ccs.tencent-cloud.com PING cls-igajfhjz.ccs.tencent-cloud.com (10.132.18.116) 56(84) bytes of data. 64 bytes from cls-igajfhjz.ccs.tencent-cloud.com (10.132.18.116): icmp_seq=1 ttl=54 time=7.03 ms
docker容器中通过域名解析到的大网地址,在linux主机上也是访问不通的 nc -vz 81.69.157.133 443, ip可以ping通
直接在容器中配置k8s集群的内网地址 https://10.132.18.116 后问题解决
K8S集群的默认端口是6443,但是腾讯云的不是啊,太坑了。
问题2
用dockerhub里的jenkins:lts镜像安装jenkins到k8s集群,登录后任何请求都报错"jenkins 403 No valid crumb was included in the request"
参考:www.codenong.com/cs109265932…
启动参数中添加 Dhudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTION=true
env:
- name: JAVA_OPTS
value: -XshowSettings:vm -Dhudson.slaves.NodeProvisioner.initialDelay=0 -Dhudson.slaves.NodeProvisioner.MARGIN=50 -Dhudson.slaves.NodeProvisioner.MARGIN0=0.85 -Dhudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTION=true -Duser.timezone=Asia/Shanghai
复制代码
因为域名无法解析,无法访问git仓库
报错:
Could not resolve host: git.XXXXXX.com
复制代码
集群dnsPolicy配置和场景说明
找到如下资料: help.aliyun.com/document_de… ACK支持通过dnsPolicy字段为每个Pod配置不同的DNS策略。目前ACK集群支持四种策略:
- ClusterFirst:通过CoreDNS来做域名解析,Pod内/etc/resolv.conf配置的DNS服务地址是集群DNS服务的kube-dns地址。该策略是集群工作负载的默认策略。
- None:忽略集群DNS策略,需要您提供dnsConfig字段来指定DNS配置信息。
- Default:Pod直接继承集群节点的域名解析配置。即在ACK集群直接使用ECS的/etc/resolv.conf文件(文件内配置的是阿里云DNS服务)。
- ClusterFirstWithHostNet:强制在hostNetWork网络模式下使用ClusterFirst策略(默认使用Default策略)。
jenkins属于第三种情况,yaml直接配置dnsPolicy: Default就OK了
Jenkins配置访问K8S集群的两种方式
插件方式
Jenkins下载插件 Kubernete CLI,然后
{
agent any
parameters {
string(name: 'k8sCredentialsId', defaultValue: 'XXXXXX', description: 'k8s集群配置id')
string(name: 'k8sServerUrl', defaultValue: 'XXXXXX', description: 'k8s集群服务地址')
}
stages {
stage('检出代码') {
steps{
withKubeConfig([credentialsId: "${params.k8sCredentialsId}",serverUrl: "${params.k8sServerUrl}"]) {
}
}
}
}
}
复制代码
非插件方式
在/root/.kubectl中配置config文件方式
{
agent any
environment {
K8S_CONFIG = credentials('XXXXXX')
}
stages {
stage('检出代码') {
steps{
sh "mkdir -p /root/.kube"
sh "echo ${K8S_CONFIG} | base64 -d > /root/.kube/config"
sh "kubectl config --kubeconfig=/root/.kube/config get-contexts"
sh "kubectl config --kubeconfig=/root/.kube/config use-context cls-igajfhjz-100021810018-context-default"
}
}
}
}
}
复制代码
Jenkins部署推荐
Jenkins部署上手,推荐mldong的系列博客,相当赞!