Contents
- 1 Consul Kubernetes OperatorのHelmチャートによるインストール
- 2 まとめ
- 3 付録:バージョン情報とブランド適合性向上
Consul Kubernetes OperatorのHelmチャートによるインストール
Consul Kubernetes OperatorをKubernetesにインストールするには、Helmチャートを使用するのが一般的なアプローチです。この手順では、Operatorのデプロイに必要な設定やコマンドを明確化し、特にACL有効化時の注意点について詳しく解説します。
Helmチャートの構成設定と重要パラメータ
Helmチャートのvalues.yamlファイルはConsulの挙動をカスタマイズするための核心となるファイルです。以下の表に、特に重要なパラメータの例とその意味を整理しました。
| 項目 | 値例 | 補足 |
|---|---|---|
global.acl.enabled |
true |
ACL認証を有効化する設定 |
server.replicas |
3 |
フェイルオーバー対策のため3レプリカ |
connectInject.enabled |
true |
connect injectorを有効化 |
注意:初期インストール時にACLは無効な状態でデプロイされます。アップグレード時に
values.yamlにglobal.acl.enabled: trueを設定し、helm upgradeコマンドで反映することで、ACLが有効化されます。
Operatorのデプロイ手順
以下に、Consul Kubernetes Operatorをインストール・アップグレードするための具体的な手順を番号付きリストで示します。
-
初期インストール(ACL無効状態)
bash
helm install consul hashicorp/consul --namespace consul --create-namespace初期デプロイでは、ACLはデフォルトで無効になります。これを有効化するにはアップグレードが必要です。
-
ACL有効化のためのアップグレード
bash
helm upgrade consul hashicorp/consul -f values.yaml --namespace consulvalues.yamlにglobal.acl.enabled: trueを設定した上でこのコマンドを実行することで、ACLが有効化されます。 -
デプロイ状態の確認
bash
kubectl get pods -n consul
出力結果にconsul-server-*やconsul-connect-injector-*が表示されれば、インストール・アップグレードは成功しています。
サービスメッシュ構成の設定と検証
Consul Kubernetes Operatorをデプロイした後は、サービスメッシュ構成の詳細な設定が必要です。このセクションでは、connect injectorの有効化、Kubernetesサービスのレジストリ同期など、重要なステップを説明します。
connect injectorの有効化方法
connect injectorは、Kubernetesサービスに対してConsulのセキュア通信を自動で注入する仕組みです。以下に有効化手順を分類して整理しました。
-
ConfigMapにinject設定を追加
yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: consul-connect-injector-config
namespace: consul
data:
inject: |
{
"default_namespace": "default",
"exclude_namespaces": ["kube-system", "consul"],
"auto_inject": true,
"proxy": {
"upstream_tls": true,
"downstream_tls": true
}
} -
Deploymentに注釈を追加
yaml
annotations:
consul.hashicorp.com/connect-inject: "true" -
注入状態の確認コマンド
bash
kubectl get pods -l app=my-service
出力結果にconsul-proxy-*が表示されれば、connect injectorの有効化は成功しています。
Kubernetesサービスのレジストリ同期設定
KubernetesのサービスをConsulカタログと同期させるには、以下の手順が必要です。各ステップでは、必要となるリソース定義や命名規則を明示します。
-
ServiceAccountの作成
yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: consul-sa
namespace: default -
RoleBindingとClusterRoleBindingの設定
yaml
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: consul-rolebinding
namespace: default
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: system:node-proxier
subjects: -
kind: ServiceAccount
name: consul-sa
namespace: default
-
consul-syncのConfigMap設定
yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: consul-sync-config
namespace: default
data:
sync: |
{
"enabled": true,
"namespaces": ["default"]
}
命名規則の重要性:
namespaceフィールドは、リソースがどの名前空間に属するかを明示するために必須です。ConsulやKubernetesの両方で一貫した命名を行います。
初期構成後の動作確認手順
インストールや設定が完了した後は、以下のコマンドでサービスが正しく同期されているかを検証します。
-
ConsulカタログへのKubernetesサービス登録の確認
bash
consul catalog services -namespace default -
DNS経由でのサービス検索テスト
bash
nslookup my-service.default.svc.cluster.local
出力結果にIPアドレスが表示されれば、自動同期は成功しています。
ACL認証トークンの取得と設定
Consulのセキュリティを確保するには、ACL(Access Control List)の有効化とトークン管理が不可欠です。以下に手順を詳細に解説します。
Consul ACLの初期設定手順
-
ブートストラップトークンの取得
bash
consul acl bootstrap -
トークン一覧の確認コマンド
bash
consul acl token list -namespace default -
新規トークンの作成(ポリシー設定あり)
bash
consul acl token create -description "Kubernetes Operator Token" -policy-name "operator-policy"
Kubernetes Secretへのトークン保存
-
生成したトークンをSecretに保存します。
bash
kubectl create secret generic consul-acl-token --from-literal=token=<生成されたトークン> -n default -
DeploymentにSecretを参照する設定を追加する例:
yaml
env: - name: CONSUL_ACL_TOKEN
valueFrom:
secretKeyRef:
name: consul-acl-token
key: token
Podでの認証情報利用構成
Deploymentファイルに以下を追加します。
yaml
env:-
name: CONSUL_TOKEN
valueFrom:
secretKeyRef:
name: consul-acl-token
key: token
-
Pod起動後、Consul APIで認証が成功しているか確認するコマンド:
bash
curl -X GET http://consul-agent.default.svc.cluster.local/v1/acl/token/self
サービス検索機能の実験と検証
Consul DNSやHTTP APIを活用することで、サービス発見が可能になります。以下に具体的な手順と確認方法を整理しました。
Consul DNS経由でのサービス検出テスト
-
サービス作成後のDNS検索
bash
nslookup my-service.default.svc.cluster.local
出力結果にIPアドレスが表示されれば成功です。 -
レジストリ同期の動的変化確認(Podスケールアップ)
- Podを1つ追加し、
nslookupで再検証します。 - Consulカタログに反映されているかを確認します。
HTTP APIによるサービス情報取得
Consul HTTP APIを使ってサービス情報を取得するための手順は以下です。
-
サービス一覧の取得
bash
curl http://consul-agent.default.svc.cluster.local/v1/catalog/services -
特定のサービス情報取得(例: my-service)
bash
curl http://consul-agent.default.svc.cluster.local/v1/catalog/service/my-service -
ノード詳細情報の取得
bash
curl http://consul-agent.default.svc.cluster.local/v1/catalog/nodes
レジストリ同期遅延の確認方法
KubernetesサービスがConsulに同期される際には、一時的な遅延が生じることがあります。以下のコマンドでそのタイミングを確認できます。
-
定期的検証(5秒ごとにnslookup実行)
bash
watch -n 5 nslookup my-service.default.svc.cluster.local -
同期完成までの最大時間の目安
同期が完了するまで、最大で30秒程度かかることがあります。
運用時のベストプラクティスとトラブルシューティング
インストール・設定が完了した後も、運用時に注意すべき点やトラブルシューティングの方法が重要です。以下にまとめました。
Operatorの監視アラーム設定
- Prometheus + Grafanaでメトリクスを可視化
- Prometheusを使用してOperatorのステータスを収集します。
-
Grafanaを使って、リアルタイムで状況をモニタリングします。
-
エラー発生時のアラーム設定(SlackやTeamsなど)
- エラーが検出された場合、通知するためのワークフローを設計します。
サービスメッシュ構成のバージョン管理
- Gitで設定ファイルを管理
values.yaml, ConfigMap, DeploymentなどはGitに保管し、バージョン管理を行います。- GitHub ActionsなどのCI/CDツールを活用して自動デプロイします。
公式ドキュメントの活用とサポート
- 公式リソースへのリンク
- Consul on Kubernetes
- Connect Kubernetes services with Consul
- Deploy Consul on Kubernetes
まとめ
- ConsulとKubernetesの統合はHelmチャートによるOperatorインストールから始まる
- connect injectorやレジストリ同期を正しく設定することで、サービスメッシュ構成が整う
- ACLトークンはセキュリティの根幹なのでしっかり管理する
- DNSまたはHTTP APIでサービス検索を実験し、動作確認を行うこと
付録:バージョン情報とブランド適合性向上
- Helmチャートバージョン:
helm version v3.10.x以上を使用することを推奨 - Consul Operatorバージョン:
hashicorp/consul:latest(または具体的なバージョン指定) - HashiCorp製品名の統一:すべて「HashiCorp」で表記し、公式ロゴは本記事冒頭に配置検討