kubernate が nginx-ingress-controller をデプロイし、ingress ポリシーを定義する。
githubにあるnginx-ingressの最新バージョンは0.26.1です。
githubにある設定ファイルです。 https://github.com/kubernetes/ingress-nginx/tree/master/deploy/static
参考 https://blog.csdn.net/networken/article/details/85881558
githubにアクセスして設定ファイルを表示します。
I. nginx-ingressのデプロイメント設定ファイルをダウンロードする: mandatory.yaml
wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/mandatory.yaml
ミラーパスイメージの修正
image: quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.26.1
上の画像は引っ張ってこれなかったので、代わりにAliさんのgoogleリポジトリを使ってみました
image: registry.aliyuncs.com/google_containers/nginx-ingress-controller:0.26.1
変更後のyamlファイル
apiVersion: v1
kind: Namespace
metadata:
name: ingress-nginx
labels:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
---
kind: ConfigMap
apiVersion: v1
metadata:
name: nginx-configuration
namespace: ingress-nginx
labels:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
---
kind: ConfigMap
apiVersion: v1
metadata:
name: tcp-services
namespace: ingress-nginx
labels:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
---
kind: ConfigMap
apiVersion: v1
metadata:
name: udp-services
namespace: ingress-nginx
labels:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: nginx-ingress-serviceaccount
namespace: ingress-nginx
labels:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
--
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRole
metadata:
name: nginx-ingress-clusterrole
labels:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
rules:
- apiGroups:
- ""
resources:
- configmaps
- endpoints
- nodes
- pods
- secrets
verbs:
- list
- watch
- apiGroups:
- ""
resources:
- nodes
verbs:
- get
- apiGroups:
- ""
resources:
- services
verbs:
- get
- list
- watch
- apiGroups:
- ""
resources:
- events
verbs:
- create
- patch
- apiGroups:
- "extensions"
- "networking.k8s.io"
resources:
- ingresses
verbs:
- get
- list
- watch
- apiGroups:
- "extensions"
- "networking.k8s.io"
resources:
- ingresses/status
verbs:
- update
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: Role
metadata:
name: nginx-ingress-role
namespace: ingress-nginx
labels:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
rules:
- apiGroups:
- ""
resources:
- configmaps
- pods
- secrets
- namespaces
verbs:
- get
- apiGroups:
- ""
resources:
- configmaps
resourceNames:
# Defaults to "<election-id>-<ingress-class>"
# Here: "<ingress-controller-leader>-<nginx>"
# This has to be adapted if you change either parameter
# when launching the nginx-ingress-controller.
- "ingress-controller-leader-nginx"
verbs:
- get
- get
- apiGroups:
- ""
resources:
- configmaps
verbs:
- create
- apiGroups:
- ""
resources:
- endpoints
verbs:
- get
--
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: RoleBinding
metadata:
name: nginx-ingress-role-nisa-binding
namespace: ingress-nginx
labels:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: nginx-ingress-role
subjects:
- kind: ServiceAccount
name: nginx-ingress-serviceaccount
namespace: ingress-nginx
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
name: nginx-ingress-clusterrole-nisa-binding
labels:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: nginx-ingress-clusterrole
subjects:
- kind: ServiceAccount
name: nginx-ingress-serviceaccount
namespace: ingress-nginx
---apiVersion: apps/v1
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-ingress-controller
namespace: ingress-nginx
labels:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
spec:
replicas: 1
selector:
matchLabels:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
template:
metadata:
labels:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
annotations:
prometheus.io/port: "10254"
prometheus.io/scrape: "true"
spec:
# wait up to five minutes for the drain of connections
terminationGracePeriodSeconds: 300
serviceAccountName: nginx-ingress-serviceaccount
containers:
- name: nginx-ingress-controller
image: registry.aliyuncs.com/google_containers/nginx-ingress-controller:0.26.1
args:
- /nginx-ingress-controller
--configmap=$(POD_NAMESPACE)/nginx-configuration
--tcp-services-configmap=$(POD_NAMESPACE)/tcp-services
--udp-services-configmap=$(POD_NAMESPACE)/udp-services
--publish-services=$(POD_NAMESPACE)/ingress-nginx
--annotations-prefix=nginx.ingress.kubernetes.io
securityContext:
allowPrivilegeEscalation: true
capabilities:
drop:
- ALL
add:
- NET_BIND_SERVICE
# www-data -> 33
runAsUser: 33
env:
- name: POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: POD_NAMESPACE
yamlファイルのデプロイメントを実行する
kubectl create -f . /mandatory.yaml
# Results
namespace/ingress-nginx created
configmap/nginx-configuration created
configmap/tcp-services created
configmap/udp-services created
serviceaccount/nginx-ingress-serviceaccount created
clusterrole.rbac.authorization.k8s.io/nginx-ingress-clusterrole created
role.rbac.authorization.k8s.io/nginx-ingress-role created
rolebinding.rbac.authorization.k8s.io/nginx-ingress-role-nisa-binding created
clusterrolebinding.rbac.authorization.k8s.io/nginx-ingress-clusterrole-nisa-binding created
deployment.apps/nginx-ingress-controller created
II. 外部サービス提供のためのサービス展開
wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/provider/baremetal/service-nodeport.yaml
サービスファイルを修正して、nodePortとしてポート80とポート443を指定します。
Note: Change the range of the nodePort yourself: https://blog.csdn.net/fuck487/article/details/102519225
変更後の設定ファイルは次のようになります。
apiVersion: v1
kind: Service
metadata:
name: ingress-nginx
namespace: ingress-nginx
labels:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
spec:
type: NodePort
ports:
- name: http
port: 80
targetPort: 80
protocol: TCP
nodePort: 80 # http requests are mapped to port 80
- name: https
port: 443
targetPort: 443
protocol: TCP
nodePort: 443 # https requests are mapped to port 443
selector:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
--
3つ目は、イングレス転送をテストするためにtomcatをデプロイすることです。
apiVersion: v1
kind: Service
metadata:
name: tomcat
namespace: default
spec:
selector:
app: tomcat
release: canary
ports:
- name: http
targetPort: 8080
port: 8080
- name: ajp
targetPort: 8009
port: 8009
--
apiVersion: apps/v1
kind: Deployment
metadata:
name: tomcat-deploy
namespace: default
spec:
replicas: 1
selector:
matchLabels:
app: tomcat
release: canary
template: template:
metadata:
labels:
app: tomcat
release: canary
spec:
containers:
- name: tomcat
image: tomcat
ports:
- name: http
containerPort: 8080
IV. イングレスポリシーを定義する
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress-tomcat
annotations:
kubernets.io/ingress.class: "nginx"
spec:
rules:
- host: myapp.magedu.com
http:
paths:
- path:
backend:
serviceName: tomcat
servicePort: 8080
V. イングレスはドメイン名 myapp.magedu.com を設定し、クライアントはそのドメイン名を通してのみサービスにアクセスすることができ、クライアントまたはDNSがバックエンドでドメイン名を実際のIPアドレスに解決する必要があります。
Windowsの場合、C:↵WindowsSystem32↵drivers↵hostsを変更し、レコードに一行を追加します。
192.168.34.103 myapp.magedu.com
ブラウザで、次のように入力します。 http://myapp.magedu.com/
ingressが提供するサービスにアクセスできるようにする。
関連
-
[解決済み] WaitForFirstConsumer PersistentVolumeClaim バインドする前に最初のコンシューマが作成されるのを待つ。
-
[解決済み] no endpoints available for service \"kubernetes-dashboard"
-
[解決済み] kubectlで現在のコンテキストのconfigの詳細を表示するにはどうすればよいですか?
-
[解決済み] kubernetes UnexpectedAdmissionError ロールアウト後。
-
[解決済み] Nginx Ingress: サービス "ingress-nginx-controller-admission" が見つかりません。
-
kubenetes: ポッドにバインドされていないPersistentVolumeClaimsがあります。
-
Minikubeを使ったwindows10へのkubernetesのインストール
-
Kubernetesジョブコントローラーのソースコード解析
-
[解決済み] PodがTerminatingステータスで立ち往生している
-
[解決済み] kubectlのポートフォワードはどのように動作しますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] ポッドにバインドされていないPersistentVolumeClaimsがある
-
[解決済み】Kubernetes: kubectl run: コマンドが見つかりません。
-
[解決済み] Kubernetesです。kubectl configからクラスタとコンテキストを削除するにはどうすればいいですか?
-
[解決済み] KubernetesのジョブにおけるbackoffLimitの理解
-
[解決済み] Istio Ingressで "no healthy upstream "が発生する。
-
[解決済み] Kubernetes ReplicaFailure FailedCreate でもイベントなし
-
kubernetesでContainerCreating状態の原因究明と解決方法
-
[解決済み] kubeadm init は kubelet が実行中または健全でないことを表示します。
-
[解決済み] Helmを以前のリリースにロールバックする
-
[解決済み] kubernetesのdeployment yamlを変更せずにPodをローリング再起動する方法は?