![](/img/trans.png)
[英]How to expose postgres tcp port using Docker Desktop for Windows Kubernetes and ingress-nginx
[英]Kubernetes Nginx Ingress Controller on Windows with Docker Desktop - doesn't seem to work
我安装了 Docker 桌面 (Windows),并打开了 Kubernetes。
我已经通过运行以下命令安装了 Nginx 入口控制器:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.0.4/deploy/static/provider/cloud/deploy.yaml
( 以上来自文档的命令)
我已经应用了以下 YAML ...
apiVersion: apps/v1
kind: Deployment
metadata:
name: blah
spec:
replicas: 1
selector:
matchLabels:
app: blah
template:
metadata:
labels:
app: blah
spec:
containers:
- name: blah
image: tutum/hello-world
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: blah
spec:
type: NodePort
ports:
- name: http
port: 80
targetPort: 80
nodePort: 30010
selector:
app: blah
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: blah
spec:
defaultBackend:
service:
name: blah
port:
name: http
rules:
- host: kubernetes.docker.internal
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: blah
port:
name: HTTP
如果我从我的 Windows 机器http://kubernetes.docker.internal/
发出 GET 请求 - 我得到这个......
以上,我希望能击中我的豆荚。
如果我访问一个不存在的 URL(例如“http://kubernetes.docker.internal/nonexistant”),我会得到一个 NGINX 404。
如果我在 HTTPS 版本“https://kubernetes.docker.internal”上执行此操作 - 我也会得到 404。
如果我通过 NodePort 'http://kubernetes.docker.internal:30010' 访问它,那么它会按预期工作,因为它没有使用入口。
几乎就像安装了 Nginx 控制器一样,但是任何请求都只是直接命中 Nginx,而忽略了我创建的任何入口。
我确定我遗漏了一些基本的东西 - 但是关于我做错了什么的任何想法?
继@clarj 的评论之后,我查看了 nginx 控制器日志,看到以下错误:“入口不包含有效的 IngressClass”。 所以我在入口中添加了以下内容......
annotations:
kubernetes.io/ingress.class: "nginx"
这已经摆脱了错误,但没有解决问题。
这是我现在的日志...
-------------------------------------------------------------------------------
NGINX Ingress controller
Release: v1.0.4
Build: 9b78b6c197b48116243922170875af4aa752ee59
Repository: https://github.com/kubernetes/ingress-nginx
nginx version: nginx/1.19.9
-------------------------------------------------------------------------------
W1014 18:13:38.886167 7 client_config.go:615] Neither --kubeconfig nor --master was specified. Using the inClusterConfig. This might not work.
I1014 18:13:38.886636 7 main.go:221] "Creating API client" host="https://10.96.0.1:443"
I1014 18:13:38.890654 7 main.go:265] "Running in Kubernetes cluster" major="1" minor="21" git="v1.21.4" state="clean" commit="3cce4a82b44f032d0cd1a1790e6d2f5a55d20aae" platform="linux/amd64"
I1014 18:13:38.979187 7 main.go:104] "SSL fake certificate created" file="/etc/ingress-controller/ssl/default-fake-certificate.pem"
I1014 18:13:38.987243 7 ssl.go:531] "loading tls certificate" path="/usr/local/certificates/cert" key="/usr/local/certificates/key"
I1014 18:13:38.992390 7 nginx.go:253] "Starting NGINX Ingress controller"
I1014 18:13:38.995200 7 event.go:282] Event(v1.ObjectReference{Kind:"ConfigMap", Namespace:"ingress-nginx", Name:"ingress-nginx-controller", UID:"4865a09a-18fe-4760-a466-742b63ab480f", APIVersion:"v1", ResourceVersion:"14917", FieldPath:""}): type: 'Normal' reason: 'CREATE' ConfigMap ingress-nginx/ingress-nginx-controller
I1014 18:13:40.095580 7 store.go:371] "Found valid IngressClass" ingress="default/blah" ingressclass="nginx"
I1014 18:13:40.095725 7 event.go:282] Event(v1.ObjectReference{Kind:"Ingress", Namespace:"default", Name:"blah", UID:"389b024c-9148-4ed0-83b6-a8be5e241655", APIVersion:"networking.k8s.io/v1", ResourceVersion:"25734", FieldPath:""}): type: 'Normal' reason: 'Sync' Scheduled for sync
I1014 18:13:40.193521 7 nginx.go:295] "Starting NGINX process"
I1014 18:13:40.193677 7 leaderelection.go:243] attempting to acquire leader lease ingress-nginx/ingress-controller-leader...
I1014 18:13:40.193757 7 nginx.go:315] "Starting validation webhook" address=":8443" certPath="/usr/local/certificates/cert" keyPath="/usr/local/certificates/key"
I1014 18:13:40.193876 7 controller.go:152] "Configuration changes detected, backend reload required"
I1014 18:13:40.195273 7 status.go:84] "New leader elected" identity="ingress-nginx-controller-5c8d66c76d-4gfd4"
I1014 18:13:40.213501 7 controller.go:169] "Backend successfully reloaded"
I1014 18:13:40.213577 7 controller.go:180] "Initial sync, sleeping for 1 second"
I1014 18:13:40.213614 7 event.go:282] Event(v1.ObjectReference{Kind:"Pod", Namespace:"ingress-nginx", Name:"ingress-nginx-controller-5c8d66c76d-fb79x", UID:"69db0f7e-0137-48ee-b4aa-fc28d5208423", APIVersion:"v1", ResourceVersion:"25887", FieldPath:""}): type: 'Normal' reason: 'RELOAD' NGINX reload triggered due to a change in configuration
I1014 18:14:23.192016 7 leaderelection.go:253] successfully acquired lease ingress-nginx/ingress-controller-leader
I1014 18:14:23.192035 7 status.go:84] "New leader elected" identity="ingress-nginx-controller-5c8d66c76d-fb79x"
实际上,我上面“更新”中的修复确实有效。 我只需要在我的 GET 请求中使用 HTTP。
在@clarj 提示检查 Nginx 控制器 pod 日志后,我解决了这个问题。
原来我在我的入口中缺少以下注释......
annotations:
kubernetes.io/ingress.class: "nginx"
(请参阅我的初始帖子中的“更新”)
在那次修复之后 - 具有 HTTPS 的 GET 请求然后工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.