作者:六月的 | 来源:互联网 | 2022-12-09 17:05
我尝试在kubernetes群集上配置入口。我按照文档安装了入口控制器并运行了以下命令
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/mandatory.yaml
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/provider/baremetal/service-nodeport.yaml
在运行默认的http-backend和nginx-ingress-controller之后:
ingress-nginx default-http-backend-846b65fb5f-6kwvp 1/1 Running 0 23h 192.168.2.28 node1
ingress-nginx nginx-ingress-controller-d658896cd-6m76j 1/1 Running 0 6m 192.168.2.31 node1
我尝试测试入口,并部署了以下服务:
apiVersion: apps/v1
kind: Deployment
metadata:
name: echoserver-deploy
spec:
replicas: 2
selector:
matchLabels:
app: echo
template:
metadata:
labels:
app: echo
spec:
containers:
- name: my-echo
image: gcr.io/google_containers/echoserver:1.8
---
apiVersion: v1
kind: Service
metadata:
name: echoserver-svc
spec:
selector:
app: echo
ports:
- protocol: TCP
port: 8080
targetPort: 8080
以及以下入口:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: happy-ingress
annotations:
INGRESS.kubernetes.io/rewrite-target: /
spec:
rules:
- host: happy.k8s.io
http:
paths:
- path: /echoserver
backend:
serviceName: echoserver-svc
servicePort: 8080
当我运行命令“ kubectl get ing”时,我收到:
NAME HOSTS ADDRESS PORTS AGE
happy-ingress happy.k8s.io 80 14m
我没有解决ADDRESS,也无法弄清楚问题出在哪里,因为所有Pod都在运行。您能给我提示一下这个问题可能是什么吗?
谢谢
1> Shalauddin A..:
ingress addons
创建入口规则之前,必须先通过命令启用。您还可以在执行任何其他命令之前启用它
$ minikube addons enable ingress
ingress was successfully enabled
等到吊舱启动并运行。您可以通过执行以下命令来检查并等待类似的输出
kubectl get pods -n kube-system | grep nginx-ingress-controller
nginx-ingress-controller-5984b97644-jjng2 1/1 Running 2 1h
因为Deployment
您必须指定containerPort
和并且Service
必须指定http
协议。
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: echoserver-deploy
spec:
replicas: 2
selector:
matchLabels:
app: my-echo
template:
metadata:
labels:
app: my-echo
spec:
containers:
- name: my-echo
image: gcr.io/kubernetes-e2e-test-images/echoserver:2.1
ports:
- containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
name: echoserver-svc
spec:
selector:
app: my-echo
ports:
- protocol: TCP
port: 80
targetPort: 8080
name: http
对于入口规则,将端口servicePort
从8080 更改为默认的http端口80。
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: happy-ingress
annotations:
INGRESS.kubernetes.io/rewrite-target: /
spec:
rules:
- host: happy.k8s.io
http:
paths:
- path: /echoserver
backend:
serviceName: echoserver-svc
servicePort: 80
现在应用这些文件并创建您的Pod,服务和入口规则。请稍等片刻,这将花费一些时间来获取您的入口规则的地址。
现在,您可以使用minikube ip
地址访问您的服务,但不能按主机名访问。为此,您必须在/etc/hosts
文件中添加主机和相应的IP地址。因此/etc/hosts
,请在您喜欢的编辑器中打开文件,然后在下面的行中添加minikube的实际IP地址
happy.k8s.io
现在,您可以使用主机名访问服务。验证以下命令
curl http://happy.k8s.io/echoserver