私は Google の Container Engine サービスを使用しており、ポート 3000 でリッスンするサーバーを実行するポッドを取得しました。ポート 80 をそのポッドのポート 3000 に接続するようにサービスをセットアップしました。ノード内で、外部からではありません。ポート 80 を許可してノードに送信するようにファイアウォール ルールを設定しましたが、ネットワークの外部から「接続が拒否されました」というメッセージが表示され続けます。ポッドが 1 つしかなく、転送ルールには費用がかかり、負荷分散を行うように見えたため、転送ルールなしでこれを実行しようとしています。createExternalLoadBalancer: true
サービスの仕様にを追加すると、転送ルールによって作成された外部 IP が期待どおりに機能するため、ファイアウォール ルールは機能すると思います。他に何かする必要がありますか?ルート設定か何か?
コントローラー.yaml
kind: ReplicationController
apiVersion: v1beta3
metadata:
name: app-frontend
labels:
name: app-frontend
app: app
role: frontend
spec:
replicas: 1
selector:
name: app-frontend
template:
metadata:
labels:
name: app-frontend
app: app
role: frontend
spec:
containers:
- name: node-frontend
image: gcr.io/project_id/app-frontend
ports:
- name: app-frontend-port
containerPort: 3000
targetPort: 3000
protocol: TCP
service.yaml
kind: Service
apiVersion: v1beta3
metadata:
name: app-frontend-service
labels:
name: app-frontend-service
app: app
role: frontend
spec:
ports:
- port: 80
targetPort: app-frontend-port
protocol: TCP
publicIPs:
- 123.45.67.89
selector:
name: app-frontend
編集(追加の詳細):
このサービスを作成すると、実行時に見つかったこれらの追加ルールが追加されますiptables -L -t nat
Chain KUBE-PORTALS-CONTAINER (1 references)
target prot opt source destination
REDIRECT tcp -- anywhere 10.247.247.206 /* default/app-frontend-service: */ tcp dpt:http redir ports 56859
REDIRECT tcp -- anywhere 89.67.45.123.bc.googleusercontent.com /* default/app-frontend-service: */ tcp dpt:http redir ports 56859
Chain KUBE-PORTALS-HOST (1 references)
target prot opt source destination
DNAT tcp -- anywhere 10.247.247.206 /* default/app-frontend-service: */ tcp dpt:http to:10.241.69.28:56859
DNAT tcp -- anywhere 89.67.45.123.bc.googleusercontent.com /* default/app-frontend-service: */ tcp dpt:http to:10.241.69.28:56859
iptables を完全には理解していないため、宛先ポートが自分のサービスとどのように一致するかわかりません。89.67.45.123.bc.googleusercontent.com
の DNS が に解決されることがわかりました123.45.67.89
。
kubectl get services は、指定した IP アドレスとポートを表示します。
NAME IP(S) PORT(S)
app-frontend-service 10.247.243.151 80/TCP
123.45.67.89
外部 IP からの最近のものが /var/log/kube-proxy.log に表示されない