Kubernetes Nginx Ingress Controller 公开 Nginx Webserver
Kubernetes Nginx Ingress Controller expose Nginx Webserver
我基本上是想通过URL对外访问Nginx-hello页面。我已经为我的 v-server 运行 kubernetes 和 Nginx ingress 创建了一个子域的(工作)A 记录:vps.my-domain.com
我使用这些教程通过 kubeadm 在 CoreOS 上将 Kubernetes 安装为单节点集群:https://kubernetes.io/docs/setup/independent/install-kubeadm/, https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/, and nginx-ingress using https://kubernetes.github.io/ingress-nginx/deploy/#bare-metal.
我还在 /etc/hosts 文件中添加了以下条目:
31.214.xxx.xxx vps.my-domain.com
(xxx被替换为服务器IP后三位)
我使用以下文件创建部署、服务和入口:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-nginx
spec:
selector:
matchLabels:
run: my-nginx
replicas: 1
strategy:
type: Recreate
template:
metadata:
labels:
run: my-nginx
spec:
containers:
- name: my-nginx
image: nginx
ports:
- name: http
containerPort: 80
protocol: TCP
---
apiVersion: v1
kind: Service
metadata:
name: my-nginx
labels:
run: my-nginx
spec:
type: ClusterIP
ports:
- name: http
port: 80
protocol: TCP
targetPort: http
selector:
run: my-nginx
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: my-nginx
annotations:
kubernetes.io/ingress.class: "nginx"
ingress.kubernetes.io/ssl-redirect: "False"
spec:
rules:
- host: vps.my-domain.com
http:
paths:
- backend:
serviceName: my-nginx
servicePort: 80
描述ing的输出:
core@vps ~/k8 $ kubectl describe ing
Name: my-nginx
Namespace: default
Address:
Default backend: default-http-backend:80 (<none>)
Rules:
Host Path Backends
---- ---- --------
vps.my-domain.com
my-nginx:80 (<none>)
Annotations:
kubectl.kubernetes.io/last-applied-configuration:
{"apiVersion":"extensions/v1beta1",...}
kubernetes.io/ingress.class: nginx
ingress.kubernetes.io/ssl-redirect: False
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal UPDATE 49m (x2 over 56m) nginx-ingress-controller Ingress default/my-nginx
虽然我可以使用 nodeip 和端口 80 卷曲 Nginx hello 页面,但它在 VM 外部不起作用。 Failed to connect to vps.my-domain.com port 80: Connection refused
是我忘记了什么还是配置有误?任何帮助或提示将不胜感激!
谢谢
编辑:
访问 "vps.my-domain.com:30519` 给我 Nginx 欢迎页面。但在配置中我指定了端口:80。
我从 get services 的输出中得到了端口:
core@vps ~/k8 $ kubectl get services --all-namespaces | grep "my-nginx"
default my-nginx ClusterIP 10.107.5.14 <none> 80/TCP 1h
我还通过添加
让它在端口 :80 上工作
externalIPs:
- 31.214.xxx.xxx
到 my-nginx 服务。但这不是它应该的工作方式,对吧?在 kubernetes 和 ingress-nginx 的教程和示例中,它总是在没有外部 IP 的情况下工作。此外,入口规则现在不起作用(例如,如果我将路径设置为 /test)。
很明显我遗漏了一个部分:负载平衡器。我不确定为什么这些说明中没有将其作为要求提及。但我遵循了本教程:https://kubernetes.github.io/ingress-nginx/deploy/baremetal/#a-pure-software-solution-metallb 现在一切正常。
由于 metallb 需要多个 IP 地址,您必须列出子网 \32 的单个 IP 地址:31.214.xxx.xxx
我基本上是想通过URL对外访问Nginx-hello页面。我已经为我的 v-server 运行 kubernetes 和 Nginx ingress 创建了一个子域的(工作)A 记录:vps.my-domain.com
我使用这些教程通过 kubeadm 在 CoreOS 上将 Kubernetes 安装为单节点集群:https://kubernetes.io/docs/setup/independent/install-kubeadm/, https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/, and nginx-ingress using https://kubernetes.github.io/ingress-nginx/deploy/#bare-metal.
我还在 /etc/hosts 文件中添加了以下条目:
31.214.xxx.xxx vps.my-domain.com
(xxx被替换为服务器IP后三位)
我使用以下文件创建部署、服务和入口:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-nginx
spec:
selector:
matchLabels:
run: my-nginx
replicas: 1
strategy:
type: Recreate
template:
metadata:
labels:
run: my-nginx
spec:
containers:
- name: my-nginx
image: nginx
ports:
- name: http
containerPort: 80
protocol: TCP
---
apiVersion: v1
kind: Service
metadata:
name: my-nginx
labels:
run: my-nginx
spec:
type: ClusterIP
ports:
- name: http
port: 80
protocol: TCP
targetPort: http
selector:
run: my-nginx
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: my-nginx
annotations:
kubernetes.io/ingress.class: "nginx"
ingress.kubernetes.io/ssl-redirect: "False"
spec:
rules:
- host: vps.my-domain.com
http:
paths:
- backend:
serviceName: my-nginx
servicePort: 80
描述ing的输出:
core@vps ~/k8 $ kubectl describe ing
Name: my-nginx
Namespace: default
Address:
Default backend: default-http-backend:80 (<none>)
Rules:
Host Path Backends
---- ---- --------
vps.my-domain.com
my-nginx:80 (<none>)
Annotations:
kubectl.kubernetes.io/last-applied-configuration:
{"apiVersion":"extensions/v1beta1",...}
kubernetes.io/ingress.class: nginx
ingress.kubernetes.io/ssl-redirect: False
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal UPDATE 49m (x2 over 56m) nginx-ingress-controller Ingress default/my-nginx
虽然我可以使用 nodeip 和端口 80 卷曲 Nginx hello 页面,但它在 VM 外部不起作用。 Failed to connect to vps.my-domain.com port 80: Connection refused
是我忘记了什么还是配置有误?任何帮助或提示将不胜感激!
谢谢
编辑:
访问 "vps.my-domain.com:30519` 给我 Nginx 欢迎页面。但在配置中我指定了端口:80。 我从 get services 的输出中得到了端口:
core@vps ~/k8 $ kubectl get services --all-namespaces | grep "my-nginx"
default my-nginx ClusterIP 10.107.5.14 <none> 80/TCP 1h
我还通过添加
让它在端口 :80 上工作externalIPs:
- 31.214.xxx.xxx
到 my-nginx 服务。但这不是它应该的工作方式,对吧?在 kubernetes 和 ingress-nginx 的教程和示例中,它总是在没有外部 IP 的情况下工作。此外,入口规则现在不起作用(例如,如果我将路径设置为 /test)。
很明显我遗漏了一个部分:负载平衡器。我不确定为什么这些说明中没有将其作为要求提及。但我遵循了本教程:https://kubernetes.github.io/ingress-nginx/deploy/baremetal/#a-pure-software-solution-metallb 现在一切正常。
由于 metallb 需要多个 IP 地址,您必须列出子网 \32 的单个 IP 地址:31.214.xxx.xxx