Docker でリモートの安全なアクセスを有効にする方法の詳細なグラフィック チュートリアル

Docker でリモートの安全なアクセスを有効にする方法の詳細なグラフィック チュートリアル

1. docker.serviceファイルを編集する

: : vi /usr/lib/systemd/system/docker.service を実行します。

[Service]ノードを見つけて、ExecStartプロパティを変更し、 -H tcp://0.0.0.0:2375を追加します。

ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H tcp://0.0.0.0:2375

これはポート2375を外部に開放するのと同じです。もちろん、自分の状況に応じて他のポートに変更することもできます。

2. Docker設定をリロードして有効にする

systemctlデーモンリロード
systemctl dockerを再起動します

ブラウザから2375にアクセスしてテストします。形式は次のとおりです: http://ip:2375/version

アクセスできない場合は、ファイアウォールのポート 2375 を開いてみてください。具体的なコマンドは次のとおりです。

ファイアウォールコマンド --zone=public --add-port=2375/tcp --permanent
ファイアウォール-cmd --reload

それでもアクセスできない場合は、使用しているマシンが Alibaba Cloud、Tencent Cloud などのクラウド サーバーである場合は、サーバーのセキュリティ グループ ルールでポート 2375 が開いているかどうかを確認する必要があります。開いていない場合は、ポート構成を追加します。

このようにして、Idea の Docker プラグインのテストに直接接続できます。

3. Dockerのセキュアアクセスを構成する

上記の 2 つの手順は、本番環境では使用しないでください。開発環境で使う分には問題ありません。このようにDockerを直接外部に公開すると、パスワードを設定せずにRedisを外部に公開するのと同じように、非常に危険です。

基本的に、インターネット上の多くの記事は、上記の 2 つの手順、裸の手順のようなものです...よく考えてください、よく考えてください、あなたでなければ、誰がハッキングされるのでしょうか?

実際、公式ドキュメントでは、CA 証明書に基づく暗号化方式がすでに提供されています。詳細については、ここをクリックしてください。

1. CA秘密鍵とCA公開鍵を作成する

まず、秘密鍵と公開鍵を保存するためのcaフォルダを作成します。

mkdir -p /usr/local/ca
/usr/local/ca をコピー

次に、 Docker デーモンのホスト上で、CA 秘密鍵と公開鍵を生成します。

openssl genrsa -aes256 -out ca-key.pem 4096

上記の手順を実行すると、次のステップに進む前にパスワードの入力を求められます。ここではパスワードを niceyoo に設定しました。

2. CA証明書情報を入力する

次のコマンドを実行します。

openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem

次に、アクセス パスワード、国、都道府県、市区町村、組織名、部署名、任意の名前、電子メール アドレスなどを順番に入力します。時間を節約するために、組織やユニットなどの代わりに niceyoo を使用します。

niceyoo cn 北京 北京 niceyoo niceyoo niceyoo [email protected]

この時点で、CA 証明書が作成されています。CA を使用すると、サーバー キーと証明書署名要求 (CSR) を作成し、「共通名」が Docker への接続時に使用するホスト名と一致することを確認できます。

3. server-key.pemを生成する

openssl genrsa -out サーバーキー.pem 4096

4. CAで公開鍵に署名する

TLS 接続は IP アドレスと DNS 名の両方を介して確立できるため、証明書を作成するときに IP アドレスを指定する必要があります。たとえば、 10.211.55.4使用した接続を許可するには、次のようにします。

openssl req -subj "/CN=10.211.55.4" -sha256 -new -key server-key.pem -out server.csr

URL (例: www.sscai.club) を使用している場合は、次のように置き換えてください:

openssl req -subj "/CN=www.sscai.club" -sha256 -new -key server-key.pem -out server.csr

注: ここで言及されている IP またはドメイン名は、将来的に外部目的で使用されるアドレスを指します。

5. 一致するホワイトリスト

ホワイトリストを設定することの意義は、どの IP アドレスが Docker にリモート接続できるかを許可することです。これを行うには 2 つの方法がありますが、5.2 の手順 2 を実行するだけで済みます。

5.1. 指定された IP がサーバー内の Docker に接続できるようにします。複数の IP はカンマで区切られます。

外部 Docker アドレスが IP アドレスの場合、コマンドは次のようになります。

echo subjectAltName = DNS:$HOST、IP:XX.XX.XX.XX、IP:XX.XX.XX.XX >> extfile.cnf

使用する場合、外部に公開する Docker リンクが IP アドレスか URL かに応じて、 $HOST独自の IP アドレスまたは URL に置き換えます。

# サーバー 10.211.55.4 上の Docker は、IP アドレス 221.217.177.151 のクライアントのみ接続を許可します echo subjectAltName = DNS:10.211.55.4,IP:221.217.177.151 >> extfile.cnf

# www.sscai.club サーバー上の Docker は、IP アドレス 221.217.177.151 および 127.0.0.1 を持つクライアントのみ接続を許可します echo subjectAltName = DNS:www.sscai.club,IP:221.217.177.151,IP:127.0.0.1 >> extfile.cnf

5.2. すべての IP が接続できるように 0.0.0.0 を設定します (ただし、永続的な証明書を持つ IP のみが正常に接続できます)

echo subjectAltName = DNS:10.211.55.4,IP:0.0.0.0 >> extfile.cnf

6. コマンドを実行する

Docker デーモン キーの拡張使用プロパティをサーバー認証にのみ使用するように設定します。

echo 拡張キー使用法 = serverAuth >> extfile.cnf

7. 署名整数を生成する

openssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem \
-CAcreateserial -out server-cert.pem -extfile extfile.cnf

実行後、上記で設定したパスワードを入力する必要があります

8. クライアントキー.pemを生成する

openssl genrsa -out キー.pem 4096
openssl req -subj '/CN=client' -new -key key.pem -out client.csr

9. クライアント認証に適したキーを作成する

拡張機能構成ファイルを作成します。

echo 拡張キー使用法 = clientAuth >> extfile.cnf
echo 拡張キー使用法 = clientAuth > extfile-client.cnf

10. 署名整数を生成する

openssl x509 -req -days 365 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem \
-CAcreateserial -out cert.pem -extfile extfile-client.cnf

cert.pem を生成するには、以前に設定したパスワードを再度入力する必要があります: niceyoo

11. 不要なファイルと2つの整数署名要求を削除する

cert.pemserver-cert.pemを生成したら、証明書署名要求と拡張構成ファイルの両方を安全に削除できます。

rm -v client.csr server.csr extfile.cnf extfile-client.cnf

12. 変更可能な権限

キーが誤って破損するのを防ぐには、書き込み権限を削除します。読み取り専用にするには、ファイル モードを次のように変更します。

chmod -v 0400 ca-key.pem key.pem server-key.pem

証明書は、偶発的な破損を防ぐために書き込み権限を削除して、公開読み取り可能にすることができます。

chmod -v 0444 ca.pem server-cert.pem cert.pem

13. サーバー証明書を収集する

cp server-*.pem /etc/docker/
cp ca.pem /etc/docker/

14. Docker構成を変更する

DockerデーモンがCAによって信頼された証明書を提示するクライアントからの接続のみを受け入れるようにする

vim /lib/systemd/system/docker.service

ExecStartプロパティの値を置き換えます。

ExecStart=/usr/bin/dockerd --tlsverify --tlscacert=/usr/local/ca/ca.pem --tlscert=/usr/local/ca/server-cert.pem --tlskey=/usr/local/ca/server-key.pem -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock

15.デーモンをリロードしてdockerを再起動する

systemctlデーモンリロード

systemctl dockerを再起動します

IDEA の docker モジュールで確認し、以前の接続を見てみましょう。

当然、接続は不可能です。このとき、docker ホストによって作成された証明書を取得し、その証明書を使用して接続する必要があります。

これら 4 つの証明書ファイルをローカル フォルダーにプルします。このフォルダーは、アイデアを指定するために使用されます。TCP のリンクを Https 形式に変更する必要があることに注意してください。具体的な内容は、次の図に示されています。

要約する

これで、Docker でリモート セキュア アクセスを有効にする方法についての詳細なグラフィック チュートリアルに関するこの記事は終了です。Docker リモート アクセスの詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • DockerにTomcatコンテナを追加したときにホームページにアクセスできない問題の解決方法
  • 独立した IP を介して Windows コンテナ イントラネットの Docker に直接アクセスする方法
  • Centos Docker ブリッジ モードでホスト Redis サービスにアクセスできないというトラブルシューティングの経験
  • Dockerを使用して外部からアクセス可能なMySQLを構築する詳細な説明
  • dockerコンテナがIP経由でホストマシンにアクセスできない問題を解決する方法の詳細な説明
  • Dockerでローカルマシン(ホストマシン)にアクセスする方法
  • Dockerコンテナを使用してホストネットワークにアクセスする方法
  • 実行後にdocker nginxにアクセスできない問題の解決策
  • Dockerコンテナ内の独立IPにアクセスする方法
  • Dockerコンテナ間で通信する3つの方法

<<:  ユーザー名が使用可能かどうかを確認するVueメソッド

>>:  mysql トリガーの作成と使用例

推薦する

イメージのパッケージ化とワンクリック展開を実現するためにDockerを組み合わせたアイデア

1. サーバーにDockerをインストールする yumでdockerをインストール設定ファイルを変更...

HTML の類似タグと属性の違いの詳細な説明

【1】<i></i>タグと<em></em>タグ同じ...

Vue Element フロントエンドアプリケーション開発の動的メニューとルーティングの関連付け処理

目次概要1. メニューとルーティング処理2. メニューとルートリスト3. ログインプロセスの処理概要...

Ubuntu 18.04 サーバーのパスワードを忘れたり改ざんされた場合にパスワードをリセットする方法

最近、サーバー上のアカウントが2つハッキングされ、パスワードが改ざんされました。幸い、まだ使えるアカ...

MySQL 8 の新機能: 非表示のインデックス

背景インデックスは諸刃の剣です。クエリ速度は向上しますが、DML 操作も遅くなります。結局のところ、...

Nodejs-cluster モジュールの知識ポイントの概要と使用例

面接官から「NodeJS で複数のプロセスを開始する方法を教えてください」と尋ねられることがあります...

arcgis.js は、マップ本体の表示範囲を制御し、領域を超えた場合に自動的にバウンスするようにします (実装のアイデア)

目次背景効果アイデア背景少し前に、会社のプロジェクトで問題が発生しました。地図のベースマップ領域の範...

MySQL で重複しない携帯電話番号テーブルをバッチ生成する方法のサンプルコード

序文多くの MySQL テスト シナリオでは、テスト用に一部のテスト データを手動で生成する必要があ...

MySQLのスリープ関数の特殊現象例の詳しい説明

序文MySQL のスリープ システム機能は、実用的な適用シナリオが少なく、通常は実験的なテストに使用...

要素UIテーブルはドロップダウンフィルタリング機能を実現します

この記事の例では、要素UIテーブルにドロップダウンフィルタリングを実装するための具体的なコードを参考...

RedHat 6.5/CentOS 6.5 に MySQL 5.7.20 をインストールするための詳細なチュートリアル

rpmインストールパッケージをダウンロードするMySQL公式サイト: https://dev.mys...

CSS 線形グラデーション凹型長方形遷移効果の実装

この記事では、線形グラデーションの凹四角形の遷移効果の難しさやアイデアについて説明します。主に、凹四...

React+Antdはテーブルの追加、削除、変更の例を実装します

目次テーブル/index.jsテーブル/モデル/index.jsテーブル/モデル/モジュール/bas...

Oracle Rownum 書き込みに似た MySQL の詳細な例

Rownum は、Oracle での独自の書き込み方法です。Oracle では、rownum を使用...

ElementUI のネストされたテーブルに基づいて複数選択を実装するためのサンプル コード

序文:私は友人のプロジェクトのバグを修正するのを手伝ったのでこれを書きました。この関数を書くのは初め...