目的
Kubernetes内部のアプリケーションを外部から疎通確認可能にするため、
外部公開用Ingressの作成します。
疎通時、ポート番号をHTTPのデフォルトポートとする場合、
デフォルトポートをターゲットとしたセキュリティ攻撃になりうるため、
HTTP、HTTPSのデフォルトポートを使わないサービスの構成にします。
(後述では、ポート番号の記載は非公開とさせていただきます。)
構築準備・事前作業
ポートを定義します。
- port:★httpdのDockerで起動するhttpdのリッスンポート★
- targetPort: ★デフォルトでは利便性のため、portに書き換わる★
※特段なんでもいいのですが、変えてもいいと思います。 - nodePort: ★コンテナホスト側のポート★
参考:https://kubernetes.io/ja/docs/concepts/services-networking/service/
つまり仕組みとしては、ノードIP:nodePort→Kubernetesの内部では、portを宛先に接続します。
- apache-deployment.yml
apiVersion: v1
kind: Service
metadata:
name: apache-service
spec:
selector:
app: apache
ports:
- name: http
port: ★適当★
targetPort: ★httpdのDockerで解放しているポート★
nodePort: ★コンテナホスト側のポート★
type: LoadBalancer
実行内容
実行結果は結構シンプルです。
[root@t_kyn029 apachedocker]# kubectl apply -f apache-deployment.yml
service/apache-service created
[root@t_kyn029 apachedocker]#
疎通確認
ここでは疎通確認はできないため、割愛しますが、確認すると、serviceが起動していることがわかります。
[root@t_kyn029 apachedocker]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
apache-service LoadBalancer 10.98.214.9 <pending> 【nodePort★コンテナホスト側のポート★】:【port★適当★】/TCP 114s
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 77d
[root@t_kyn029 apachedocker]#
(alphineLinuxを用いたk8s構築(web/ap/dbサーバ)~Apacheのイメージビルド・DeploymentPod作成編~で記載します。)
事後作業
どっちでもよいですが、削除するのであれば、
kubectl delete -f apache-deployment.yml
を実行します。
[root@t_kyn029 apachedocker]# kubectl delete -f apache-deployment.yml
service "apache-service" deleted
[root@t_kyn029 apachedocker]#
以上です。