【发布时间】:2023-03-14 02:44:01
【问题描述】:
我在私有网络(私有服务器,不是 aws 或谷歌云)上有一个 kubernetes 集群,并且我创建了一个能够访问的服务,但是,我需要能够从集群外部访问,为此我在集群中创建了一个 Ingress 并添加了 ingress-nginx。
这是我多次尝试后使用的 YAML:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: demo-ingress
annotations:
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/ssl-redirect: "false"
spec:
rules:
- host: k8s.local
http:
paths:
- path: /
backend:
serviceName: nginx
servicePort: 80
---
apiVersion: v1
kind: Service
metadata:
name: nginx
spec:
type: ClusterIP
selector:
name: nginx
ports:
- port: 80
targetPort: 80
protocol: TCP
# selector:
# app: nginx
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: nginx
spec:
replicas: 1
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: echoserver
image: nginx
ports:
- containerPort: 80
我这样运行 yaml:kubectl create -f file.yaml
在 /etc/hosts 文件中,我将 k8s.local 添加到主服务器的 ip。
在主服务器尝试输入或输出命令时,会出现“连接被拒绝”消息: $ curl http://172.16.0.18:80/ -H 'Host: k8s.local'
我不知道它是否重要,但我在集群中使用 Flannel。
我的想法只是创建一个“hello world”并将其暴露在集群之外!
我是否需要更改配置中的任何内容才能允许此访问?
YAML 文件已编辑:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: demo-ingress
annotations:
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/ssl-redirect: "false"
# nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: k8s.local
http:
paths:
- path: /teste
backend:
serviceName: nginx
servicePort: 80
---
apiVersion: v1
kind: Service
metadata:
name: nginx
spec:
type: LoadBalancer # NodePort
selector:
app: nginx
ports:
- port: 80
targetPort: 80
protocol: TCP
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: nginx
spec:
replicas: 1
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: echoserver
image: nginx
ports:
- containerPort: 80
【问题讨论】:
-
你在运行 minikube 吗?
-
由于选择器错误,服务清单将无法找到他的 pod。您应该使用匹配标签而不是部署名称的选择器。在您的示例中,它应该是
selector: app: nginx. -
不是minikube,是写的!在“应用程序”上,我很怀疑,我因为在 stackoverflow 中看到的一个例子而改变了,感谢您展示 @BalChua!
标签: kubernetes kubernetes-ingress nginx-ingress