Kubernetes上のSquid用Podをプロキシとしてnginx用Podにアクセスしたい
from 2024/12/22 Webサービスをデプロイできるアプリケーションの開発
KubernetesクラスタにSquidを動かすPodを作った
これをプロキシサーバとして、クラスタ外からnginx用Podにアクセスしたい
次のようなManifestをapplyすれば問題ないはず...
code:manifest.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: squid-deployment
spec:
replicas: 1
selector:
matchLabels:
app: squid
template:
metadata:
labels:
app: squid
spec:
containers:
- name: squid
image: ubuntu/squid
ports:
- containerPort: 3128
resources:
limits:
memory: "128Mi"
cpu: "500m"
---
apiVersion: v1
kind: Service
metadata:
name: squid-service
spec:
type: NodePort
selector:
app: squid
ports:
- port: 3128
nodePort: 30000
アクセス先のnginx用DeploymentとServiceについて
今回は、nginx用のPodにクラスタ外から直接アクセスできる必要はないものとする
したがって、nginx用のPod群に対するNodePort型のServiceは不要である
そこで、ClusterIP型のServiceを作っておくことにした
ドメイン名を使ってServiceにアクセスする
クラスタ外からアクセスしたい場合は、nginx用のServiceにどのようなDNSレコードが割り当てられるのかを意識しなければならない
参考: https://kubernetes.io/ja/docs/concepts/services-networking/dns-pod-service/#a-aaaaレコード
$ curl --proxy http://localhost:30000 -s http://nginx-service-1.deployable.svc.cluster.local
「deployable」は今回実験用に作ったNamespaceである。
cluster.localの部分は何ですか?
外部からの接続が上手く行かなかったときのメモ(原因不明)
クラスタ内では適切にプロキシが動作している
検証方法
nginxのPodが2つ存在する状況を作る
kubectl execでnginx Pod Aに接続し、bashを起動する
そのうえで、もう一つのnginx用Podにcurlする
$ curl --proxy http://(squid PodのIPアドレス):3128 http://(nginx Pod BのIPアドレス)
検証結果
nginxからのレスポンスが返ってきた
squidのaccess.logにも、URLとメソッドがともに正しく記録されていた
クラスタ外ではプロキシを適切に利用できない
検証方法
Docker / Kubernetesとは無関係なWSLディストリビューションから同様のcurlコマンドを発行する
ただし、プロキシについてはIPアドレスをlocalhost、PortをSquid用ServiceのnodePortとした
検証結果
squidからエラーが返ってきた
エラーの内容はメモしていなかった。
access.logにはリクエストメソッドが-、URLが/という行が記録されていた
Dockerでsquidを単体で立て、外側から利用したところ、やはりsquixが同様の挙動をした
このとき試したのはgoogle.comへの接続
2024/12/23追記
何もしていないが、直った
KubernetesのManifestは一切触っていないので、何もしてないのに治ったことになる
再起動したから直ったのだろうか