标签: docker

使用 kubectl 连接到远程 minikube 集群

我想看看是否可以使用本地(Mac)kubectl 连接到远程 minikube 集群(Ubuntu 盒子)。我目前使用 Docker,并且可以使用docker-machine. 只需评估机器名称,docker 就会使用远程机器。

我想知道 minikube/kubectl 是否有类似的东西?我发现一些文章提到我需要将远程~/.minikube目录复制到本地,并更改一些配置。但这对于像这样的工具docker-machine无缝完成的事情来说似乎相当复杂。

是否有类似的工具可用,或者如果没有,有人可以帮助我完成连接到远程集群所需的步骤吗?

远程机器 目前我使用docker驱动程序(这是命令的完整输出,只有一行):

$ minikube config view
- driver: docker
Run Code Online (Sandbox Code Playgroud)

并拥有多项NodePort服务:

$ kubectl get service -A
NAMESPACE     NAME              TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                  AGE
default       apigateway        NodePort    10.100.122.255   <none>        8080:30601/TCP           19h
default       discoveryserver   NodePort    10.101.106.231   <none>        8761:30602/TCP           19h
default       elasticsearch     NodePort    10.97.197.14     <none>        9200:30604/TCP           19h
default       harness           NodePort    10.97.233.245    <none>        9090:30603/TCP           19h
default       kubernetes        ClusterIP   10.96.0.1        <none>        443/TCP                  19h
default …
Run Code Online (Sandbox Code Playgroud)

remote-access docker kubernetes minikube

5
推荐指数
1
解决办法
6037
查看次数

无法通过 minikube ip 连接到 minikube ingress

所以在 docker-desktop 到处出现问题后,我才开始深入研究 minikube。我正在关注https://kubernetes.io/docs/tasks/access-application-cluster/ingress-minikube/,但我遇到了问题。

我完全按照教程的说明进行了操作:

  1. 在 minikube 中启用入口插件(顺便问一下,这也适用于通过 helm 安装的自行部署的入口控制器吗?)
  2. 部署了一个应用程序
  3. 创建了对应的Ingress配置

我验证了所有内容都可用,并最终得到以下输出kubectl get ingress

NAME              CLASS    HOSTS              ADDRESS        PORTS   AGE
example-ingress   <none>   hello-world.info   192.168.49.2   80      87m
Run Code Online (Sandbox Code Playgroud)

然而,当尝试访问 hello-world.info(无论是在我的主机文件中设置,还是直接访问 192.168.49.2,仅用于连接测试)时,除了请求超时之外,我什么也得不到。我的入口控制器的日志也没有提及任何失败的连接尝试。

通过 手动启动隧道时,连接工作正常minikube service ingress-nginx-controller-admission --namespace=kube-system

这是输出minikube profile list

|----------|-----------|---------|--------------|------|---------|---------|-------|
| Profile  | VM Driver | Runtime |      IP      | Port | Version | Status  | Nodes |
|----------|-----------|---------|--------------|------|---------|---------|-------|
| minikube | docker    | docker  | 192.168.49.2 | 8443 | v1.20.2 | Running …
Run Code Online (Sandbox Code Playgroud)

docker kubernetes minikube

5
推荐指数
1
解决办法
1万
查看次数

让Docker监听服务器的IPv6地址,将IPv6请求转发到正确的容器

我的服务器在 IPv4 和 IPv6 上运行。Docker 在(本地)IPv4 地址(即 192.168.100.1/24)上运行。我没有在内部启用 IPv6,daemon.json因为我知道这会带来很多问题,并且需要我拥有完整的 IPv6 /64 范围可用。

例如,反向代理 nginx docker 容器正在运行superuser.one,该 IP 可通过 IPv4 和 IPv6 访问。

# dig superuser.one +short a
85.17.140.73
# dig superuser.one +short aaaa
2001:1af8:4200:a003:1:aaaa:0:123
Run Code Online (Sandbox Code Playgroud)

IPv6 正在运行:

# ping6 superuser.one -c 1
PING superuser.one(2001:1af8:4200:a003:1:aaaa:0:123 (2001:1af8:4200:a003:1:aaaa:0:123)) 56 data bytes
64 bytes from 2001:1af8:4200:a003:1:aaaa:0:123 (2001:1af8:4200:a003:1:aaaa:0:123): icmp_seq=1 ttl=57 time=19.5 ms

--- superuser.one ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 19.526/19.526/19.526/0.000 ms …
Run Code Online (Sandbox Code Playgroud)

ipv6 ipv4 docker

5
推荐指数
1
解决办法
1万
查看次数

在管理模式下运行 Windows 容器的命令提示符

我在容器中运行 Windows Nanoserver。nanoserver 仅包含命令提示符,缺少 powershell。

我想在命令提示符下的容器内执行某些需要提升权限的命令。我目前正在使用以下命令启动容器的命令提示符。

docker exec -it <container_id> cmd

还有其他方法可以在管理模式下运行命令提示符吗?

windows windows-command-prompt containers docker windows-server-2019

5
推荐指数
1
解决办法
9863
查看次数

systemd-udevd 垃圾邮件 systemd-udevd[1523120]:veth20996a5:无法获取链接配置:没有这样的设备

我已经使用 Graylog 设置了我的服务器日志记录,现在我看到我的日志被 level: 3 错误发送,如下所示:

systemd-udevd[1523120]: veth20996a5: Failed to get link config: No such device
Run Code Online (Sandbox Code Playgroud)

我认为 vethxxxxxxx 是 Docker 创建的接口,但我无法弄清楚是什么导致了这些错误。

任何帮助解决这个问题并找到这些错误原因的帮助都将非常感激。

spam logging udevd systemd docker

5
推荐指数
0
解决办法
1626
查看次数

使用fixed-cidr-v6更改全局IPv6地址与docker

为了在我的 docker 设置中启用 IPv6,我已在文件中进行了设置/etc/docker/daemon.json

{
"ipv6": true,
"fixed-cidr-v6": "2a01:xxxx:yyyy:zzzz/64"
}
Run Code Online (Sandbox Code Playgroud)

我从我的 ISP 处获得2a01:xxxx:yyyy:zzzz并通过 找到它ip addr | grep inet6 | grep global

我的 ISP 不断改变该zzzz位,并且在重新启动路由器时它也会改变。

问题:

  • A)是否有不需要硬编码更改值的 docker 设置?(想法:设置fixed-cidr-v6为某些链接本地值fd00:...
  • B) 我可以使用动态 DNS 客户端来更新我的域 AAAA 记录。但同样,IPv6 在我的本地设置中是硬编码的。
  • C) Docker 在现实世界中似乎无法与 IPv6 一起使用。我是否必须直接在反向代理后面的主机上(而不是在容器中)运行我的应用程序?

ipv6 docker

5
推荐指数
1
解决办法
4590
查看次数

仍然困惑为什么当你让一个进程监听 0.0.0.0 而不是 127.0.0.1 时 docker 可以工作

const hostname = '0.0.0.0'; // << This is where I'm confused
const port = 3000;

const server = http.createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('Hello World');
});

server.listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`);
});
Run Code Online (Sandbox Code Playgroud)

当我对这个应用程序进行 dockerize 并在容器中运行它时,主机名 0.0.0.0 可以工作,但 127.0.0.1 不起作用。我理解原因是因为 docker 容器几乎都有自己的 IP。

因此,当我构建并运行容器时,将主机名变量设置为 127.0.0.1,然后在浏览器上访问 127.0.0.1,我没有连接到容器的 IP 地址,而是连接到我的本地计算机。

但是为什么当我在 0.0.0.0 上运行容器化应用程序并在浏览器上访问 127.0.0.1 时,它现在连接到容器而不是我的本地计算机?

谢谢。

networking docker

5
推荐指数
1
解决办法
5480
查看次数

使用containerd时如何登录docker hub?

使用 docker 我会运行docker login,但是你如何使用ctr/进行类似的操作containerd

由于达到速率限制,我们需要登录:

ctr:复制失败:httpReaderSeeker:打开失败:意外状态代码https://registry-1.docker.io/v2/library/[...]:429 请求太多 - 服务器消息:toomanyrequests:您已达到您的要求拉动速率限制。您可以通过身份验证和升级来增加限制: https: //www.docker.com/increase-rate-limit

按照containerd文档/etc/containerd/config.toml

version = 2
[plugins."io.containerd.grpc.v1.cri".registry.configs."docker.io".auth]
  username = "myusername"
  password = "mypassword"
Run Code Online (Sandbox Code Playgroud)

似乎不起作用。

docker containerd

5
推荐指数
1
解决办法
1万
查看次数

docker-compose `restart:always` 随机不起作用

我管理一些安装了 Docker CE 的 Debian 服务器,并且 docker-compose 编排了多个服务(每台机器大约 20 个容器)。

每个服务都配置有restart: always每个服务都在 docker-compose 中但是,有一些随机服务(通常每台计算机有 1-2 个)可以正确关闭,但在主机重新启动期间不会重新启动。这种行为是完全随机的。有时所有服务都会启动,有时 docker-compose.yml 文件中的一项服务不会重新启动。

以下是 Traefik 正确关闭但未出现的示例:

  1. 配置为自动重启的服务:
$ cat docker-compose.yml
version: '3'

services:
  reverse-proxy:
    image: traefik:1.7
    restart: always
    command: --web
    ports:
      - "80:80"
      - "443:443"
      - "8080:8080"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ./traefik.toml:/traefik.toml
    networks:
      - web

Run Code Online (Sandbox Code Playgroud)
  1. 退出代码是 128
$ docker-compose ps
         Name                Command        State     Ports
-----------------------------------------------------------
traefik_reverse-proxy_1   /traefik --web   Exit 128
Run Code Online (Sandbox Code Playgroud)
  1. 日志显示该服务已正确关闭,但此后没有任何活动迹象:
$ docker-compose logs --tail 6 -t
Attaching to traefik_reverse-proxy_1
reverse-proxy_1  | 2022-01-21T14:05:28.042399112Z …
Run Code Online (Sandbox Code Playgroud)

debian docker docker-compose

5
推荐指数
0
解决办法
6189
查看次数

使用iptables转发,同时妥善保留源IP

我有一台运行 Wireguard 的服务器(因此需要masquerade)和一个在端口 2525 上运行的容器。

我有以下iptables规则:

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 25 -j DNAT --to-destination 172.18.0.1:2525
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Run Code Online (Sandbox Code Playgroud)

直接连接时server:2525,Docker 容器能够看到我的真实 IP 地址 ( 1.2.3.4)。当连接到 port 时server:25,Docker 容器会看到由以下内容提供的本地 IP docker network

Apr 07 12:45:46 mx postfix/smtpd[87]: lost connection after CONNECT from unknown[172.18.0.1]
Apr 07 12:45:46 mx postfix/smtpd[87]: disconnect from unknown[172.18.0.1] commands=0/0
Run Code Online (Sandbox Code Playgroud)

如何确保 Docker 容器在连接到端口 25 时(而不仅仅是在连接到端口 2525 时)正确地看到公共 IP …

iptables port-forwarding forwarding docker

5
推荐指数
1
解决办法
4196
查看次数