Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

how to modify params of delivery mode from url to request.body ? #75

Open
dnsisme opened this issue Sep 15, 2022 · 55 comments
Open

how to modify params of delivery mode from url to request.body ? #75

dnsisme opened this issue Sep 15, 2022 · 55 comments

Comments

@dnsisme
Copy link

dnsisme commented Sep 15, 2022

No description provided.

@opskumu
Copy link
Owner

opskumu commented Sep 15, 2022

@dnsisme 你的意思是通过 url 修改 request.body 的数据吗?这个应该做不了吧

@dnsisme
Copy link
Author

dnsisme commented Oct 19, 2022

@opskumu
您好 上次你提到的修改参数传递方式开发完成了,实现思路,就是将之前的url传递参数方式更新为通过body方式传递参数。

我遇到一个新的问题,无论是以二进制程序的启动方式启动程序还是直接go run main.go启动程序,从办公网甚至是本地请求查看releases接口信息的时候,出现连接集群报错如下:
Uploading 51275d7e8726bf87e661818a40b60929.png…

这里我首先把apiserver 6443代理映射成内网可以访问的端口范围:8000-9000:kubectl proxy --address='0.0.0.0' --accept-hosts='^*$' --port=8009

然后在根据源码的方式赋值集群变量,去测试还是连不上。
Uploading 3ea1c77ae13609781205a294d988fc4a.png…
Uploading 4206ee89a5f0f38a2fd8631276b3e1fd.png…

你有遇到这个问题吗?

@opskumu
Copy link
Owner

opskumu commented Oct 20, 2022

@dnsisme 图都挂了

@opskumu
Copy link
Owner

opskumu commented Oct 20, 2022

另外需要确认下你 kubeconfig 配置应该是配置好的吧

@dnsisme
Copy link
Author

dnsisme commented Oct 21, 2022

@opskumu
kubeconfig就是k8s集群的~/.kube/config

apiVersion: v1
clusters:
- cluster:
    certificate-authority-data:xxx==
    server: https://10.153.70.18:6443
  name: cluster.local
- cluster:
    server: ""
  name: default
contexts:
- context:
    cluster: cluster.local
    user: kubernetes-admin
  name: [email protected]
current-context: [email protected]
kind: Config
preferences: {}
users:
- name: kubernetes-admin
  user:
    client-certificate-data:xxx
    client-key-data:xxx=

办公网请求报错
image

根据源码修改测试连接结果如下

func listReleases(c *gin.Context) {
	params := &_struct.ListReleasesParams{}
	err := c.BindJSON(params)
	if err != nil {
		err := errors.New("bind params error")
		respErr(c, err)
		return
	}
	namespace := params.Namespace

	//内网下请求 KubeAPIServer 的地址,默认端口:6443
	settings.KubeAPIServer = "http://10.153.70.18:8009"
	//适用于多集群的场景,用于区分不同的集群,类似于天牛的环境ID
	kubeContext := params.KubeContext
	dir, err := os.Getwd()
	if err != nil {
		panic(err)
	}
	file := dir + "/conf/kube/config"
	kubeConfig, err := os.ReadFile(file)
	if err != nil {
		panic(err)
	}

	//rr.GET("/first", func(c *gin.Context) {
	//        fmt.Println("first .........")
	//    })

	var options releaseListOptions
	err = c.ShouldBindJSON(&options)
	if err != nil && err != io.EOF {
		respErr(c, err)
		return
	}
	actionConfig, err := actionConfigInit(InitKubeInformation(namespace, kubeContext, string(kubeConfig)))
	if err != nil {
		respErr(c, err)
		return
	}

image

源码如下
image

@opskumu
Copy link
Owner

opskumu commented Oct 21, 2022

@dnsisme kubeConfig 直接指定文件名就好了,不要读取啊,这里是它的文件路径,不是内容

	file := dir + "/conf/kube/config"
	kubeConfig, err := os.ReadFile(file)
	if err != nil {
		panic(err)
	}

@dnsisme
Copy link
Author

dnsisme commented Oct 25, 2022

@opskumu
不好意思,我没太懂,kubeConfig存在工程目录/conf/kube下,名称就是config,直接文件名它会和其他路径下的相同文件名重合。

@opskumu
Copy link
Owner

opskumu commented Oct 25, 2022

@dnsisme 你代码里面不需要 ReadFile,kubeConfig 是 kubeConfig 的文件路径

@opskumu
Copy link
Owner

opskumu commented Oct 25, 2022

func listReleases(c *gin.Context) {
        ......
        // 这就是你下面要传的 kubeConfig,kubeConfig 路径不是读取文件的内容
	kubeConfig := dir + "/conf/kube/config"   

	// kubeConfig, err := os.ReadFile(file)   
	// if err != nil {
	// 	panic(err)
	// }

	//rr.GET("/first", func(c *gin.Context) {
	//        fmt.Println("first .........")
	//    })
        ......
	actionConfig, err := actionConfigInit(InitKubeInformation(namespace, kubeContext, kubeConfig))
	if err != nil {
		respErr(c, err)
		return
	}

@dnsisme
Copy link
Author

dnsisme commented Oct 25, 2022

@opskumu 嗯嗯 我改了运行了一下 发现一个新问题 这里的kubecontext我需要给传入什么呢?本地调试发现这里失败了
image
image

@opskumu
Copy link
Owner

opskumu commented Oct 25, 2022

@dnsisme 如果 kubeconfig 是单一集群的,直接指定 "" 就好了

apiVersion: v1
clusters:
- cluster:
    certificate-authority-data:xxx==
    server: https://10.153.70.18:6443
  name: cluster.local
- cluster:
    server: ""
  name: default
contexts:
- context:
    cluster: cluster.local
    user: kubernetes-admin
  name: [email protected]  // 这个就是 context
current-context: [email protected]
kind: Config
preferences: {}
users:
- name: kubernetes-admin
  user:
    client-certificate-data:xxx
    client-key-data:xxx=

@dnsisme
Copy link
Author

dnsisme commented Oct 25, 2022

@opskumu
我改成""以后本地调试还是卡在下面了
image

@opskumu
Copy link
Owner

opskumu commented Oct 25, 2022

@dnsisme client.Run() 你这是做啥啊,如果要部署或者升级得传 name 啊

@dnsisme
Copy link
Author

dnsisme commented Oct 25, 2022

@opskumu
我是测试下面接口可用性
接口:/api/namespaces/releases
功能:查看指定namespace下的应用信息
image

@opskumu
Copy link
Owner

opskumu commented Oct 25, 2022

卡住了,也不报错吗

@dnsisme
Copy link
Author

dnsisme commented Oct 26, 2022

@opskumu
昨天一直卡住,今天重试可以请求到了,如下
image

这里我如果需要区分多集群的话就将~/.kube/config中下面的值赋给kubeContext吗?
image

我发现我们三个k8s集群的值都是一样的,这个怎么区分呀?我是否可以将其自己修改成一个自定义的值,用来区分三个集群呢?
[email protected]

@opskumu
Copy link
Owner

opskumu commented Oct 26, 2022

@dnsisme kubeconfig context 名需要你们自己定义的哈

@dnsisme
Copy link
Author

dnsisme commented Oct 27, 2022

@opskumu
好的,请教个其他问题,该开源代码可以实现远程云端或者是网络隔离的院端k8s集群吗?

@opskumu
Copy link
Owner

opskumu commented Oct 27, 2022

@opskumu

好的,请教个其他问题,该开源代码可以实现远程云端或者是网络隔离的院端k8s集群吗?

主要依赖 kubeconfig,可以访问就行

@dnsisme
Copy link
Author

dnsisme commented Nov 1, 2022

@opskumu
大佬 请教下我这边镜像仓库的认证信息是通过账号密码来访问的,我这边传入这俩参数以后,发现还是回请求镜像仓库提示401

image

我如何成功访问到镜像仓库呢?

@opskumu
Copy link
Owner

opskumu commented Nov 3, 2022

@dnsisme 支持这些选项

// Entry represents a collection of parameters for chart repository
type Entry struct {
    Name                  string `json:"name"`
    URL                   string `json:"url"`
    Username              string `json:"username"`
    Password              string `json:"password"`
    CertFile              string `json:"certFile"`
    KeyFile               string `json:"keyFile"`
    CAFile                string `json:"caFile"`
    InsecureSkipTLSverify bool   `json:"insecure_skip_tls_verify"`
}

修改配置如:

helmRepos:
  - name: bitnami
    url: https://charts.bitnami.com/bitnami
    insecure_skip_tls_verify: true
    username: <>
    password: <>

@dnsisme
Copy link
Author

dnsisme commented Nov 3, 2022

@opskumu
好的 感谢大佬
请教下 我如何实现一个chart管理应用程序的更新呢?我们有chart.tar.gz的部署包,有统一管理的镜像仓库地址,镜像仓库我按照你提供的参数去传递相关值即可。

这里具体需要关注的是uploadchart接口呢还是说仅仅需要关注upgraderelease接口即可呢?

@opskumu
Copy link
Owner

opskumu commented Nov 3, 2022

@dnsisme 通过 upgrade release 接口就好了,那个 upload chart 只是方便上传 chart 的

@dnsisme
Copy link
Author

dnsisme commented Nov 8, 2022

好的 请教下我在测试更新接口的时候出现如下问题

image

这里我可以通过让用户传入namespace、chart、release信息,实现程序内部判断当namespace下release存在的时候,则调用更新方法,否则调用安装release方法。这里大概怎么实现呢,是否支持?

@opskumu
Copy link
Owner

opskumu commented Nov 8, 2022

image

upgrade 里面有一个 install 选项,如果不存在则安装,如果存在则更新

@opskumu
Copy link
Owner

opskumu commented Nov 8, 2022

你出现的问题是不是本身目标的 chart 有问题呢

@opskumu
Copy link
Owner

opskumu commented Nov 8, 2022

@dnsisme 你截图里面有密码信息,屏蔽下吧

@dnsisme
Copy link
Author

dnsisme commented Nov 8, 2022

@opskumu

确实是我长传的chart不对,没找到,所以报如上问题。现在是我直接调用upgraderelease接口,第一次安装一个新的服务,这里我想请问下如何动态实现存在则更新不存在则安装呢,我按照如下方式传递参数以后,正常应该是直接安装ihcloud-console这个应用,但还是提示如下问题。其中debug这个namespace已经存在啦,所以设置create_namespace为false,另一个参数不懂具体啥意思,也设置了false.
image

image

1、我多次测试发现一个新的应用无法直接通过upgraderelease接口实现安装,会提示"xxx" has no deployed releases问题,这里确实没有发布过,但是按照传递参数情况需要直接安装在传递进来的namespace下,结果没安装成功。
image

2、直接调用install接口测试在一个新空间下安装一个新应用,报错如下。
image

3、我直接对已存在的应用不做任何的更改调用upgraderelease接口,可以完成更新。
image
image
image

这里我希望对外只暴露一个upgraderelease的接口,直接实现安装更新。

@opskumu
Copy link
Owner

opskumu commented Nov 9, 2022

image

create_namespace 和 dependency 那两个是 install 的选项,不过 upgrade 里面如果你指定了 install 为 true 则可以指定 create_namespace 选项

@opskumu
Copy link
Owner

opskumu commented Nov 9, 2022

@dnsisme 另外,你是基于 master 分支的吧,之前 upgrade 有一个 bug,前一段时间才修复的

@dnsisme
Copy link
Author

dnsisme commented Nov 9, 2022

@opskumu

1、我是8.16号之前基于master分支下载的代码库.bug会影响新应用通过upgraderelease安装吗?

2、create_namespace和dependency两个参数明白了,那如果是我第一次安装需要创建namespace的话,这里create_namespace设置为true,另一个不太懂具体的影响,当我需要安装的时候也设置为true。现在是一个新的应用通过upgrade直接安装不上去。报错如下:
image

@opskumu
Copy link
Owner

opskumu commented Nov 9, 2022

@dnsisme 你分支代码不支持,最新的 commit 那个就是我修复的,你可以 merge 下

@dnsisme
Copy link
Author

dnsisme commented Nov 10, 2022

@opskumu
已经merge

chart下载的问题我已经解决啦
1、第一次在新空间下调用upgraderelease接口部署应用,还是提示如下报错
image

2、直接调用install接口,无法创建namespace,报错如下:
image

@opskumu
Copy link
Owner

opskumu commented Nov 10, 2022

  1. 你第一个问题报错应该是远程包的问题导致的,而且你这个貌似指定的是本地的啊
  2. 确认了下当前版本是支持的,已经验证是可以的

@dnsisme
Copy link
Author

dnsisme commented Nov 11, 2022

@opskumu
大佬,感谢支持,第一个问题我已经解决,现在请教以下几点问题~

1、现在唯一的问题就是调用upgraderelease接口,设置create_namespace: true,结果装不上去,提示如下:
image

2、我尝试调用installrelease接口在新空间下安装应用,设置create_namespace:true,结果也是装不上去,提示如下:
image

这里我确定使用的chart部署包是通过参数传递下载到agent上的最新部署包
image

你验证的时候是直接通过upgraderelease接口在一个新空间下去安装一个新应用吗?这里除了设置create_namespace:true,dependency_update:true,以外还需要注意啥呢?

@opskumu
Copy link
Owner

opskumu commented Nov 11, 2022

@dnsisme 只需要 create_namespace 就可以了

@opskumu
Copy link
Owner

opskumu commented Nov 11, 2022

你可以测试当前 master 分支的代码

@dnsisme
Copy link
Author

dnsisme commented Nov 11, 2022

@opskumu

感谢大佬 啊 太难了 呜呜呜 我的代码库加上了master下2022.8月份以来的最新提交,但还是存在同样的问题。

当前master的测试需要调整一堆信息,我优先查看创建namespace失败和第一次部署应用调用upgraderelease失败的问题吧

@opskumu
Copy link
Owner

opskumu commented Nov 11, 2022

@dnsisme 不应该啊,我测试确实没有问题

@dnsisme
Copy link
Author

dnsisme commented Nov 11, 2022

@opskumu

就真的很奇怪,我对比master检查了很多遍install接口的代码没看到异常,唯一的区别是我自己下载chart将本地的chart赋值给cp,然后注释掉了这里的方法
image

在上面基础上我加了一些打印日志发现调用这个源码有报错,后来我把LocateChart取消注释后还是有下面同样的问题
image

// Run executes the installation
//
// If DryRun is set to true, this will prepare the release, but not install it

func (i *Install) Run(chrt *chart.Chart, vals map[string]interface{}) (*release.Release, error) {
	ctx := context.Background()
	return i.RunWithContext(ctx, chrt, vals)
}

@dnsisme
Copy link
Author

dnsisme commented Nov 11, 2022

@opskumu
image

这里不加*吗
image

@opskumu
Copy link
Owner

opskumu commented Nov 12, 2022

你要看 runInstall func 是不是是指针,这里就是个 struct,不需要加 * 啊

@dnsisme
Copy link
Author

dnsisme commented Nov 14, 2022

@opskumu

好的 感谢大佬 这里传递的是一个struct 已修改

我现在调用uograderelease接口去安装应用,提示如下
image

image

image

这里的chart名称为什么重新指定一个名称提示没有文件呢?
这里我传入的chart是一个chart压缩包cp
cp context is: /Users/yangning11/workspace/baidu/ihcloud/helm-wrapper/helm-wrapper-1.0.0-340169228.tgz

是需要对这个进行处理,解压然后传递解压后的chart名称以及完整目录吗~

@opskumu
Copy link
Owner

opskumu commented Nov 14, 2022

不太明白你具体的场景,如果要安装一个 chart tar 包的话,需要在具体的路径里面,如默认的 uploadPath/tmp/charts

image

@dnsisme
Copy link
Author

dnsisme commented Nov 14, 2022

@opskumu
感谢大佬 我这边参数传递问题 部署安装功能都调通了
不过有个问题就是支持多集群的部署,是同样需要维护多套kubeconfig以及通过kube_context来区分吗?

@opskumu
Copy link
Owner

opskumu commented Nov 14, 2022

@dnsisme 你可以使用一个 kubeconfig 维护多个集群,通过 context 来指定多个不同的集群哈

@dnsisme
Copy link
Author

dnsisme commented Nov 16, 2022

@opskumu
大佬 还是想请教下你 你这边有试过一套配置管理多个k8s集群吗

默认我们三个集群的kubeconfig中context内容是一样的 我如何自定义生效这里的context name,然后实现我通过一个配置中kube_context不同的值,操作不同的k8s集群呢?

@opskumu
Copy link
Owner

opskumu commented Nov 16, 2022

@dnsisme 你自己修改成不一样的,这个直接看官方文档就好了

@dnsisme
Copy link
Author

dnsisme commented Nov 24, 2022

@opskumu
大佬 请教下 我们没有做任何更改 突然出现下面问题
Kubernetes cluster unreachable: the server has asked for the client to provide credentials
image

有遇到过吗,如何修复呢~

@opskumu
Copy link
Owner

opskumu commented Nov 24, 2022

是不是你的 kubeconfig 证书有问题啊

@dnsisme
Copy link
Author

dnsisme commented Nov 25, 2022

@opskumu
对的 感谢大佬 更新以后再次测试没问题啦

@dnsisme
Copy link
Author

dnsisme commented Dec 5, 2022

@opskumu
大佬 遇到这个问题没?
问题一:支持的pod重启策略类型:Always,其他的类型:OnFailure、Never不支持。
9db8efb016dcebfb0b7f76dc939e5a4c

这里能否都支持呢

问题二:helm部署的时候,如果已存在的release是failed状态,那么调用upgrade接口更新还是失败,无法成功,除非手动helm delete掉failed的release,再触发部署才可以成功。

@opskumu
Copy link
Owner

opskumu commented Dec 5, 2022

@dnsisme

  1. Deployment 本身就不支持哈

  2. 可以确认下 helm 本身是不是也是这样操作的,如果是的话应该是 helm 本身这么设计的吧

@dnsisme
Copy link
Author

dnsisme commented Dec 29, 2022

@opskumu
大佬 请教下 什么情况下访问apiserver 6443会提示输入账号密码认证信息?集群没有更新过,一段时间没有启动服务,再次启动测试功能提示如下:
image

server下访问以上地址报错如下:
9541b19d9c726a3ae66e5f81ce04bf35

我在网页端测试访问雀实需要输入账号密码,如下:
image

@opskumu
Copy link
Owner

opskumu commented Jan 1, 2023

@dnsisme 这个应该开启认证了吧,另外访问是走的 kubeconfig,你确认 kubeconfig 是否有问题,这个报错看着你对应地址本身设置导致的...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants