mirror of
https://github.com/kubenetworks/kubevpn.git
synced 2025-09-27 03:36:09 +08:00

* refactor: refactor dns * refactor: optimize forward dns server * refactor: add short domain test * refactor: fix remove nameserver from resolver bug --------- Co-authored-by: wencaiwulue <895703375@qq.com>
110 lines
3.5 KiB
Go
110 lines
3.5 KiB
Go
package dev
|
|
|
|
import (
|
|
"fmt"
|
|
"net"
|
|
|
|
"github.com/containerd/containerd/platforms"
|
|
"github.com/docker/docker/api/types/network"
|
|
|
|
"github.com/wencaiwulue/kubevpn/v2/pkg/util"
|
|
)
|
|
|
|
// 这里的逻辑是找到指定的容器。然后以传入的参数 tempContainerConfig 为准。即也就是用户命令行指定的参数为准。
|
|
// 然后附加上 deployment 中原本的声明
|
|
func mergeDockerOptions(r ConfigList, copts *Options, tempContainerConfig *containerConfig) {
|
|
if copts.ContainerName != "" {
|
|
var index = -1
|
|
for i, config := range r {
|
|
if config.k8sContainerName == copts.ContainerName {
|
|
index = i
|
|
break
|
|
}
|
|
}
|
|
if index != -1 {
|
|
r[0], r[index] = r[index], r[0]
|
|
}
|
|
}
|
|
|
|
config := r[0]
|
|
config.Options = copts.Options
|
|
config.Copts = copts.Copts
|
|
|
|
if copts.DevImage != "" {
|
|
config.config.Image = copts.DevImage
|
|
}
|
|
if copts.Options.name != "" {
|
|
config.containerName = copts.Options.name
|
|
} else {
|
|
config.Options.name = config.containerName
|
|
}
|
|
if copts.Options.platform != "" {
|
|
p, _ := platforms.Parse(copts.Options.platform)
|
|
config.platform = &p
|
|
}
|
|
|
|
tempContainerConfig.HostConfig.CapAdd = append(tempContainerConfig.HostConfig.CapAdd, config.hostConfig.CapAdd...)
|
|
tempContainerConfig.HostConfig.SecurityOpt = append(tempContainerConfig.HostConfig.SecurityOpt, config.hostConfig.SecurityOpt...)
|
|
tempContainerConfig.HostConfig.VolumesFrom = append(tempContainerConfig.HostConfig.VolumesFrom, config.hostConfig.VolumesFrom...)
|
|
tempContainerConfig.HostConfig.DNS = append(tempContainerConfig.HostConfig.DNS, config.hostConfig.DNS...)
|
|
tempContainerConfig.HostConfig.DNSOptions = append(tempContainerConfig.HostConfig.DNSOptions, config.hostConfig.DNSOptions...)
|
|
tempContainerConfig.HostConfig.DNSSearch = append(tempContainerConfig.HostConfig.DNSSearch, config.hostConfig.DNSSearch...)
|
|
tempContainerConfig.HostConfig.Mounts = append(tempContainerConfig.HostConfig.Mounts, config.hostConfig.Mounts...)
|
|
for port, bindings := range config.hostConfig.PortBindings {
|
|
if v, ok := tempContainerConfig.HostConfig.PortBindings[port]; ok {
|
|
tempContainerConfig.HostConfig.PortBindings[port] = append(v, bindings...)
|
|
} else {
|
|
tempContainerConfig.HostConfig.PortBindings[port] = bindings
|
|
}
|
|
}
|
|
|
|
config.hostConfig = tempContainerConfig.HostConfig
|
|
config.networkingConfig.EndpointsConfig = util.Merge[string, *network.EndpointSettings](tempContainerConfig.NetworkingConfig.EndpointsConfig, config.networkingConfig.EndpointsConfig)
|
|
|
|
c := tempContainerConfig.Config
|
|
var entrypoint = config.config.Entrypoint
|
|
var args = config.config.Cmd
|
|
// if special --entrypoint, then use it
|
|
if len(c.Entrypoint) != 0 {
|
|
entrypoint = c.Entrypoint
|
|
args = c.Cmd
|
|
}
|
|
if len(c.Cmd) != 0 {
|
|
args = c.Cmd
|
|
}
|
|
c.Entrypoint = entrypoint
|
|
c.Cmd = args
|
|
c.Env = append(config.config.Env, c.Env...)
|
|
c.Image = config.config.Image
|
|
if c.User == "" {
|
|
c.User = config.config.User
|
|
}
|
|
c.Labels = util.Merge[string, string](config.config.Labels, c.Labels)
|
|
c.Volumes = util.Merge[string, struct{}](c.Volumes, config.config.Volumes)
|
|
if c.WorkingDir == "" {
|
|
c.WorkingDir = config.config.WorkingDir
|
|
}
|
|
for k, v := range config.config.ExposedPorts {
|
|
if _, found := c.ExposedPorts[k]; !found {
|
|
c.ExposedPorts[k] = v
|
|
}
|
|
}
|
|
|
|
var hosts []string
|
|
for _, domain := range copts.ExtraRouteInfo.ExtraDomain {
|
|
ips, err := net.LookupIP(domain)
|
|
if err != nil {
|
|
continue
|
|
}
|
|
for _, ip := range ips {
|
|
if ip.To4() != nil {
|
|
hosts = append(hosts, fmt.Sprintf("%s:%s", domain, ip.To4().String()))
|
|
break
|
|
}
|
|
}
|
|
}
|
|
config.hostConfig.ExtraHosts = hosts
|
|
|
|
config.config = c
|
|
}
|