2020/05/22
Http ProxyをGKE上に構築する
概要
Titleの通りですが、Http Proxy ServerであるsquidをGKEを使って導入しました。
目的としては、オフィス外などのネットワークから、テスト環境のサイトに接続する時に使っています。
テスト環境のサイトはIP Whitelistを使って、アクセス制限をかけています。
オフィス環境以外の場所からアクセスしたい時に、Proxyサーバーを経由すると、開発環境のサーバーからはProxyサーバー(のNAT)のIPアドレスから
アクセスがきたものと認識します。
なので、Proxyサーバー(のNAT)のIPアドレスをIP White listに追加することで、オフィス外の環境からのアクセスを実現しています。
実施事項
以下の通り設定ファイルを作って、deployしました。
k8sのデプロイ内容詳細
事前準備
- htpasswdコマンドを使って、基本認証のユーザー・パスワードを作成します。
% htpasswd -c passwords basic-user-name
New password: XXXXXXX
Re-type new password: XXXXXXX
% cat passwords
basic-user-name:YYYYYYYYYYYYYYYYY.
- 公開するためのelastic ip addressを作成しておきます。
k8sへのデプロイ設定ファイル及び順序
namespace
apiVersion: v1
kind: Namespace
metadata:
name: squid
config map
apiVersion: v1
kind: ConfigMap
metadata:
name: squid-config
namespace: squid
data:
squid.conf: |
auth_param basic program /usr/lib/squid3/basic_ncsa_auth /etc/squid3/passwords
acl authenticated proxy_auth REQUIRED
http_access allow authenticated
http_port 3128
passwords: |
basic-user-name:YYYYYYYYYYYYYYYYY. # <- 事前準備で作成したpasswordsの内容
deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: squid
namespace: squid
labels:
app: squid
spec:
replicas: 1
selector:
matchLabels:
app: squid
template:
metadata:
labels:
app: squid
node: backend
spec:
containers:
- name: squid
image: sameersbn/squid:3.5.27-2
ports:
- containerPort: 3128
protocol: TCP
name: squid
volumeMounts:
- name: data
mountPath: /var/spool/squid
- name: squid-config
mountPath: /etc/squid/squid.conf
subPath: squid.conf
- name: squid-config
mountPath: /etc/squid3/passwords
subPath: passwords
volumes:
- name: data
emptyDir: {}
- name: squid-config
configMap:
name: squid-config
service
apiVersion: v1
kind: Service
metadata:
name: squid
namespace: squid
spec:
type: LoadBalancer
loadBalancerIP: <XXX.XXX.XXX.XXX> # <- 事前準備で作成した外部IPアドレスの値
ports:
- name: squid
port: 3128
targetPort: squid
protocol: TCP
selector:
app: squid
これらのdeploy後に、内部DNSにAレコードを追加します。
また、特定のip範囲からしかproxyに接続できないようにFirewallを設定します。
関連する記事
[小〜中規模向け]GKEにTiDBをデプロイする
MySQL互換のNewSQLであるTiDBをGKEにデプロイしてみました。
NATS JetStream Controllerを使ってNATSをGKEにデプロイする
helm chartのnackを使って、NATS JetStreamサーバーをデプロイして、Stream/Consumerをk8sリソースとして管理する
GKEにDragonflydbをデプロイする
redis互換のdragonflydbをGKEにデプロイしました
[GKE]Kafka Strimziをアップグレードする
GKEにデプロイしているKafka Strimzi 0.26.0を0.30.0にアップグレードする