メインコンテンツにスキップ

(無料)コンテナ全体が不要なネットワークはコンテナを停止させることができるでしょうか? cpolar+sshのミラーとsshuttleネットワークが存在します

· 阅读需 8 分钟

コンテナを使えば制限付きネットワーク: cpolar+sshをイメージし、sshuttle はあらゆる環境で (k8 を含む)、ウェブサイト、およびターミナル (端末としても利用される) ことができます。

前言

開発作業中は他の会社からの接続が必要な場合に限り、一般に、他の企業からvpnのアクセス、jumpserverで相互に接続可能であることを知らせる。

这时, 一般就会遇到几个痛点: - 想要访问k8s中的容器服务, k8s内部域名无法直接使用 - 要装很多乱七八糟的vpn软件, 不同公司用的vpn可能就不一样, 有的vpn甚至像流氓软件一样, 有各种限制 - 有的公司不提供vpn或jumpserver, 只能去现场 - 家里网络和公司网络不互通的问题(在公司想访问家里的一些服务, 或在家想访问公司的一些服务等)

然而, 打通网络后, 都有哪些好处呢? - 自己本地电脑不在需要安转太多的vpn软件了 - 所能触碰到的每台内网服务器, 都能成为你在何时何地都能访问或当做跳板机的工具 - 内网才能打开的页面, 随时都能打开了 - 网页系统应用能用浏览器打开了 - nacos能用浏览器打开了 - 内网才能访问的服务器, 随时都能访问了 - 数据库能通过idea或者DBeaver可视化连接了

つまりインターネットは sshにアクセスし スがたどり着くことができるので 独自のコンピュータを 同じネットワークで相互通話できるようにします

フォード

需要有机会把容器起起来, 一般有以下几种方式, 选一个方便去操作的就行, 当容器起来之后, 网络就打通了, 虚拟机等过渡工具就可以删掉了, 不需要了 - 通过jumpserver页面登录 - 自己本身就安转了vpn - 找安装了vpn的同事 - 专门找台机用于安装各种乱七八糟的vpn也行 - 当然起个虚拟机去安转也行

第一歩:生成用ドキュメントを作成するためのDockerファイル。

Linuxカーネルにアクセスするシステム、またはパソコンも、(イメージ作成時にビルドするプラットフォームを指定する必要がある場合)、x86アーキテクチャに切り替え、それらを適切なディレクトリとして、www/container/colar-ssh`

  • Dockerfileファイルを生成する
# vim Dockerfile
# 使用官方 CentOS 基础镜像(PS: latest版拉取openssh-server依赖报错)
# FROM centos:centos7.9.2009
FROM registry.cn-hangzhou.aliyuncs.com/iuin/centos:latest

# ENV https_proxy=http://192.168.0.121:7890 http_proxy=http://192.168.0.121:7890 all_proxy=socks5://192.168.0.121:7890

RUN sed -i s/mirror.centos.org/vault.centos.org/g /etc/yum.repos.d/*.repo && \
sed -i s/^#.*baseurl=http/baseurl=http/g /etc/yum.repos.d/*.repo && \
sed -i s/^mirrorlist=http/#mirrorlist=http/g /etc/yum.repos.d/*.repo && \
yum install -y wget && \
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

# 安装必要的软件包
RUN yum update -y && yum install -y openssh-server openssh-clients passwd && yum clean all

# 设置 root 密码, 修改 SSH 配置文件允许密码登录和 root 登录
RUN echo "root:password" | chpasswd && \
sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/g' /etc/ssh/sshd_config && \
sed -i 's/#PasswordAuthentication no/PasswordAuthentication yes/g' /etc/ssh/sshd_config && \
/usr/sbin/sshd-keygen

RUN curl -L https://www.cpolar.com/static/downloads/install-release-cpolar.sh | bash

COPY cpolar.yml /usr/local/etc/cpolar/cpolar.yml

# 开启服务后, /usr/sbin/init命令会自动帮忙启动服务
RUN systemctl enable cpolar.service


# 创建启动脚本
RUN tee /usr/local/bin/start-cpolar.sh <<-'EOF'
#!/bin/bash
cpolar authtoken ${CPOLAR_AUTH_TOKEN}
EOF

RUN chmod +x /usr/local/bin/start-cpolar.sh

# 创建包装服务
RUN tee /etc/systemd/system/cpolar-wrapper.service <<-'EOF'
[Unit]
Description=Cpolar Wrapper Service
# After=network.target
After=cpolar.service

[Service]
Type=simple
ExecStart=/usr/local/bin/start-cpolar.sh
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target
EOF

# 启用包装服务
RUN systemctl enable cpolar-wrapper.service


# 暴露 SSH 端口
EXPOSE 22
# 启动ssh和cpolar服务
# ENTRYPOINT [ "/usr/sbin/init" ]


# 创建初始化脚本
RUN tee /usr/local/bin/init-container.sh <<-'EOF'
#!/bin/bash
# 替换环境变量的值
sed -i "s/\${CPOLAR_AUTH_TOKEN}/$CPOLAR_AUTH_TOKEN/g" /usr/local/bin/start-cpolar.sh
sed -i "s/\${CPOLAR_CONTANER_SSH_NAME}/${CPOLAR_CONTANER_SSH_NAME:-contaner_ssh}/g" /usr/local/etc/cpolar/cpolar.yml
# 启动 init
exec /usr/sbin/init
EOF

RUN chmod +x /usr/local/bin/init-container.sh

# 使用初始化脚本作为入口点
ENTRYPOINT ["/usr/local/bin/init-container.sh"]

ステップ 2: docker-compose.ymlを作成し、コンテナを簡単にビルドおよび実行できるようにします

vim docker-compose.yml

services:
cpolar-ssh:
build:
context: .
dockerfile: Dockerfile
environment:
- TZ="Asia/Shanghai"
- CPOLAR_AUTH_TOKEN=xxx
- CPOLAR_CONTANER_SSH_NAME=contaner_ssh_1
restart: unless-stopped
privileged: true
volumes:
- ./cpolar.yml:/usr/local/etc/cpolar/cpolar.yml

  • マウント用のcpolar設定ファイルを書く
    • これは、Dockerfileに書き込み、環境変数を設定することで環境変数を更新することができます
    • トンネルの追加を設定してマウントスクリプトを設定する必要があります。これにより 基本プロセスを単純化できます
vim cpolar.yml

tunnels:
${CPOLAR_CONTANER_SSH_NAME}:
proto: tcp
addr: "22"
bind_tls: both
start_type: enable

3 番目の手順: docker-compose、コンテナを見つけてアップロードし、アップロードすることができます。

環境変数を設定してください。主にCPOLAR_AUTH_TOKENを使用して、cpolarに無料のアカウントを登録する必要があります。

# マップを構築し、
docker-compose up -d
  • sshリモート接続を使用してエフェクトをお試しください
# vim ~/.ssh/config
Host cpolar.internet.company
HostName xxx.tcp.cpolar.top
User root
Port 111
IdentityFile ~/.ssh/id_ed25519
# 上传公钥, 开启免密登录, 这一步也是顺便检查了是否能够正常通过内网穿透ssh到容器中
ssh-copy-id cpolar.internet.company -i ~/.ssh/id_ed25519
# 然后, 通过ssh免密登录
ssh cpolar.internet.company

基本的に何でも接続sshを共にする事で セットアップ作業を簡素化され 高度なアプリが出来ました

Aliyun 仮想マシンへのアップロード、コンテナの設定も簡略化されます。

# 登录
docker login --username=xxx@qq.com registry.cn-hangzhou.aliyuncs.com
## 标记本地镜像并指向目标仓库(ip:port/image_name:tag,该格式为标记版本号)
docker tag cpolar-ssh registry.cn-hangzhou.aliyuncs.com/xxx/cpolar-ssh:latest
## 推送镜像到仓库
docker push registry.cn-hangzhou.aliyuncs.com/xxx/cpolar-ssh:latest

docker-composeの設定

単純化すると、docker-compose構成が必要になります。もちろん、 cpolarをDocker内で統合する代わりに、マウントコンフィグ化する必要があるかもしれません。

services:
cpolar-ssh:
image: registry.cn-hangzhou.aliyuncs.com/xxx/cpolar-ssh:latest
environment:
- TZ="Asia/Shanghai"
- CPOLAR_AUTH_TOKEN=${CPOLAR_AUTH_TOKEN}
- CPOLAR_CONTANER_SSH_NAME=contaner_ssh_1
restart: unless-stopped
privileged: true

sshuttleツールとの組み合わせでwebページを参照しやすくします

SSL上のyoutleツールを利用し、sshによるトラフィック代理をコンテナに転送、ホストを渡すようにコンテナ内のページにアクセスすることができます。

# (macos)
brew install sshuttle
# プロキシトラフィック
sshuttle --sudoers-user fa --dns --method auto --auto-hosts --auto-nets -D -r car.internet.company 0.10.0/24

最後

それが基本的に 私たちが行った第一歩です あるインターネットのように web サイトや接続データベースが 正しく動作します

  • そして、前置きの既存の案の存在にいくつか問題があることを述べる。

    • パスワードが不適切です
    • docker-composeの中でprivileged: true、コンテナの許可はすごく高すぎます。
    • プレイヤーが使用するサーバをプロキシサーバーとして使用するサーフェスです
  • 次の目標

    • sshはパスワードを使用してログインすることを忘れた場合にログインを無効にする
    • コンテナサービス管理ツールはsystemdを使っていません。より軽量のマルチサービス管理ツールtini機関車に置き換えます。
      • dockerコンテナ用の privileged: trueも設定しない
    • 組み込みのウェブサーバをオープンソース化するためのfrpに変更します。 もちろん、ソーシャルネットワーキングのサーバが必要です。
  • 関連リンク

さよなら さようなら、 さようなら、 さようなら、 さようなら、 さようなら、 バイバンキング_hand: