KubernetesクラスターでNginxイングレスコントローラーを機能させるのに問題があります。 https://kubernetes.github.io/ingress-nginx/deploy/ に従って、nginx-ingressのデプロイメント、サービス、ロールなどを作成しました
ポートhello-world
でリッスンするシンプルな8080
アプリもデプロイしました
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: hello-world
namespace: default
spec:
selector:
matchLabels:
name: hello-world
template:
metadata:
labels:
name: hello-world
spec:
containers:
- name: hello-world
image: myrepo/hello-world
resources:
requests:
memory: 200Mi
cpu: 150m
limits:
cpu: 300m
ports:
- name: http
containerPort: 8080
protocol: TCP
そのためのサービスを作成しました
kind: Service
apiVersion: v1
metadata:
namespace: default
name: hello-world
spec:
selector:
app: hello-world
ports:
- name: server
port: 8080
最後に、TLSシークレット(my-tls-secret
)を作成し、指示に従ってnginxイングレスをデプロイしました。例えば:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: nginx
name: hello-world
namespace: default
spec:
rules:
- Host: hello-world.mydomain.com
http:
paths:
- path: /
backend:
serviceName: hello-world
servicePort: server
tls:
- hosts:
- hello-world.mydomain.com
secretName: my-tls-cert
ただし、アプリケーションに到達できず、ログに表示されます
W0103 19:11:15.712062 6 controller.go:826] Service "default/hello-world" does not have any active Endpoint.
I0103 19:11:15.712254 6 controller.go:172] Configuration changes detected, backend reload required.
I0103 19:11:15.864774 6 controller.go:190] Backend successfully reloaded.
なぜService "default/hello-world" does not have any active Endpoint
なのかわかりません。 traefikイングレスコントローラーに同様のサービス定義を問題なく使用しました。
私はnginxイングレスで明らかな何かを見逃していると思います。あなたが提供できるどんな助けでもありがたいです!
発生する可能性があるもう1つの状況は、入力コントローラーの入力クラスが、サービスに使用される入力リソースマニフェストの入力クラスと一致しない場合です。
Nginxインストールコマンド、短い例:
helm install stable/nginx-ingress \
--name ${INGRESS_RELEASE_NAME} \
--namespace ${K8S_NAMESPACE} \
--set controller.scope.enabled=true \
--set controller.scope.namespace=${K8S_NAMESPACE} \
--set controller.ingressClass=${NGINX_INGRESS_CLASS}
入力リソース仕様。 、抜粋:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
labels:
annotations:
# folowing line is not valid for K8s or Helm,
# but reflects the values must be the same
kubernetes.io/ingress.class: ${NGINX_INGRESS_CLASS}