nginx - 我无法获得 Ingress 服务工作的基本示例

标签 nginx kubernetes k3s

我正在努力解决一个非常基本的示例,即面向 nginx pod 的 Ingress 服务。当我尝试访问我的示例站点时,我会得到这个简单的文本输出,而不是默认的 nginx 页面:

404 page not found

这是我正在使用的部署:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 4
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  selector:
    app: nginx
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: nginx-ingress
  namespace: default
spec:
  rules:
  - host: argo.corbe.net
    http:
      paths:
      - backend:
          serviceName: ningx
          servicePort: 80

k3s kubectl get pods -o 宽:

NAME                              READY   STATUS    RESTARTS   AGE   IP           NODE    NOMINATED NODE   READINESS GATES
nginx-deployment-d6dcb985-942cz   1/1     Running   0          8h    10.42.0.17   k3s-1   <none>           <none>
nginx-deployment-d6dcb985-d7v69   1/1     Running   0          8h    10.42.0.18   k3s-1   <none>           <none>
nginx-deployment-d6dcb985-dqbn9   1/1     Running   0          8h    10.42.1.26   k3s-2   <none>           <none>
nginx-deployment-d6dcb985-vpf79   1/1     Running   0          8h    10.42.1.25   k3s-2   <none>           <none>

k3s kubectl -o Wide 获取服务:

NAME            TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE   SELECTOR
kubernetes      ClusterIP   10.43.0.1       <none>        443/TCP   5d    <none>
nginx-service   ClusterIP   10.43.218.234   <none>        80/TCP    8h    app=nginx

k3s kubectl -o Wide 获取入口:

NAME            CLASS    HOSTS            ADDRESS          PORTS   AGE
nginx-ingress   <none>   argo.corbe.net   207.148.25.119   80      8h

k3s kubectl 描述部署 nginx-deployment:

Name:                   nginx-deployment
Namespace:              default
CreationTimestamp:      Mon, 22 Feb 2021 15:19:07 +0000
Labels:                 app=nginx
Annotations:            deployment.kubernetes.io/revision: 2
Selector:               app=nginx
Replicas:               4 desired | 4 updated | 4 total | 4 available | 0 unavailable
StrategyType:           RollingUpdate
MinReadySeconds:        0
RollingUpdateStrategy:  25% max unavailable, 25% max surge
Pod Template:
  Labels:  app=nginx
  Containers:
   nginx:
    Image:        nginx
    Port:         8080/TCP
    Host Port:    0/TCP
    Environment:  <none>
    Mounts:       <none>
  Volumes:        <none>
Conditions:
  Type           Status  Reason
  ----           ------  ------
  Available      True    MinimumReplicasAvailable
  Progressing    True    NewReplicaSetAvailable
OldReplicaSets:  <none>
NewReplicaSet:   nginx-deployment-7848d4b86f (4/4 replicas created)
Events:
  Type    Reason             Age    From                   Message
  ----    ------             ----   ----                   -------
  Normal  ScalingReplicaSet  2m43s  deployment-controller  Scaled up replica set nginx-deployment-7848d4b86f to 1
  Normal  ScalingReplicaSet  2m43s  deployment-controller  Scaled down replica set nginx-deployment-d6dcb985 to 3
  Normal  ScalingReplicaSet  2m43s  deployment-controller  Scaled up replica set nginx-deployment-7848d4b86f to 2
  Normal  ScalingReplicaSet  2m40s  deployment-controller  Scaled down replica set nginx-deployment-d6dcb985 to 2
  Normal  ScalingReplicaSet  2m40s  deployment-controller  Scaled up replica set nginx-deployment-7848d4b86f to 3
  Normal  ScalingReplicaSet  2m40s  deployment-controller  Scaled down replica set nginx-deployment-d6dcb985 to 1
  Normal  ScalingReplicaSet  2m40s  deployment-controller  Scaled up replica set nginx-deployment-7848d4b86f to 4
  Normal  ScalingReplicaSet  2m38s  deployment-controller  Scaled down replica set nginx-deployment-d6dcb985 to 0

最佳答案

nginx 镜像默认监听端口 80 上的连接。

$ kubectl run --image nginx
$ kubectl exec -it nginx -- bash
root@nginx:/# apt update
    **output hidden**
root@nginx:/# apt install iproute2
    **output hidden**
root@nginx:/# ss -lunpt
Netid     State      Recv-Q     Send-Q         Local Address:Port         Peer Address:Port                                     
tcp       LISTEN     0          0                    0.0.0.0:80                0.0.0.0:*        users:(("nginx",pid=1,fd=7))    
tcp       LISTEN     0          0                          *:80                      *:*        users:(("nginx",pid=1,fd=8))    

请注意,打开的是端口 80,而不是端口 8080。 这意味着您的服务配置错误,因为它转发到端口 8080。

您应该将目标端口设置为 80,如下所示:

apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  selector:
    app: nginx
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80    # <- HERE

另请注意服务名称:

kind: Service
metadata:
  name: nginx-service

作为支持者,您可以使用不同名称的服务:

- backend:
    serviceName: ningx

将其更改为服务的实际名称,如下所示:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: nginx-ingress
  namespace: default
spec:
  rules:
  - host: argo.corbe.net
    http:
      paths:
      - backend:
          serviceName: ningx-service
          servicePort: 80

应用更改,它现在应该可以工作了。

关于nginx - 我无法获得 Ingress 服务工作的基本示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66325066/

相关文章:

python - Nginx、django、gunicorn、ubuntu 14.04 (13 : Permission denied) while connecting to upstream

url - Artifactory 主机名解析到 docker 注册表

amazon-web-services - Kubernetes DNS 大多数时候无法解析,但有时可以解决。我能做什么来解决这个问题?

docker - Docker Swarm是否使节点之间的数据保持同步?

ubuntu - Ubuntu 22.04 上的 k3s 网络问题 : failed to get Kubernetes server version: Get \"https://10.43.0.1:443/version?timeout=32s\": i/o timeout

kubernetes - 我如何将 kubectl kustomize 的输出实际获取到我的集群中?

tomcat - 当代理服务器关闭时,NGINX 反向代理返回 502 错误网关

Kubernetes - 批量删除所有作业

networking - K3S Rancher - 基于 Debian 的 docker 镜像无法正确解析 dns

nginx - CentOS8 Nginx : [emerg] bind() failed (99: Cannot assign requested address)