IT序号网

nginx之k8s ngnix容器返回json响应

xing901022 2025年05月04日 编程语言 61 0

我有一个k8s集群,除其他外还运行nginx。
当我做curl -v <url>时我得到

    HTTP/1.1 200 OK 
< Content-Type: text/html 
< Date: Fri, 24 Mar 2017 15:25:27 GMT 
< Server: nginx 
< Strict-Transport-Security: max-age=15724800; includeSubDomains; preload 
< Content-Length: 0 
< Connection: keep-alive 
< 
* Curl_http_done: called premature == 0 
* Connection #0 to host <url> left intact 

但是当我做 curl -v <url> -H 'Accept: application/json'时我得到
< HTTP/1.1 200 OK 
< Content-Type: text/html 
< Date: Fri, 24 Mar 2017 15:26:10 GMT 
< Server: nginx 
< Strict-Transport-Security: max-age=15724800; includeSubDomains; preload 
< Content-Length: 0 
< Connection: keep-alive 
< 
* Curl_http_done: called premature == 0 
* Connection #0 to host <url> left intact 
* Could not resolve host: application 
* Closing connection 1 
curl: (6) Could not resolve host: application 

我的任务是获取返回json而不是html的请求。
据我了解,我必须创建一个入口 Controller 并以某种方式修改ngnix.conf,我已经尝试了几天,但无法正确完成。任何帮助将不胜感激。

以下是我一直在使用的yaml文件:

configmap:
apiVersion: v1 
data: 
  server-tokens: "false" 
  proxy-body-size: "4110m" 
  server-name-hash-bucket-size: "128" 
kind: ConfigMap 
metadata: 
  name: nginx-load-balancer-conf 
  labels: 
    app: nginx-ingress-lb 

守护程序:
apiVersion: extensions/v1beta1 
kind: DaemonSet 
metadata: 
  name: nginx-ingress-lb 
  labels: 
    app: nginx-ingress-lb 
spec: 
  template: 
    metadata: 
      labels: 
        name: nginx-ingress-lb 
        app: nginx-ingress-lb 
 
    spec: 
      terminationGracePeriodSeconds: 60 
      nodeSelector: 
        NodeType: worker 
      containers: 
      - image: gcr.io/google_containers/nginx-ingress-controller:0.9.0-beta.1 
 
        name: nginx-ingress-lb 
        imagePullPolicy: Always 
        readinessProbe: 
          httpGet: 
            path: /healthz 
            port: 10254 
            scheme: HTTP 
        livenessProbe: 
          httpGet: 
            path: /healthz 
            port: 10254 
            scheme: HTTP 
          initialDelaySeconds: 10 
          timeoutSeconds: 1 
        # use downward API 
        env: 
          - name: POD_NAME 
            valueFrom: 
              fieldRef: 
                fieldPath: metadata.name 
          - name: POD_NAMESPACE 
            valueFrom: 
              fieldRef: 
                fieldPath: metadata.namespace 
        ports: 
        - containerPort: 80 
          hostPort: 80 
        - containerPort: 443 
          hostPort: 443 
        args: 
        - /nginx-ingress-controller 
        - --default-backend-service=$(POD_NAMESPACE)/default-http-backend 
        - --configmap=$(POD_NAMESPACE)/nginx-load-balancer-conf 

部署:
apiVersion: extensions/v1beta1 
kind: Deployment 
 
metadata: 
  name: default-http-backend 
  labels: 
    app: default-http-backend 
 
spec: 
  replicas: 2 
  template: 
 
    metadata: 
      labels: 
        app: default-http-backend 
 
    spec: 
      terminationGracePeriodSeconds: 60 
      containers: 
      - name: default-http-backend 
        # Any image is permissable as long as: 
        # 1. It serves a 404 page at / 
        # 2. It serves 200 on a /healthz endpoint 
        image: gcr.io/google_containers/defaultbackend:1.2 
        livenessProbe: 
          httpGet: 
            path: /healthz 
            port: 8080 
            scheme: HTTP 
          initialDelaySeconds: 30 
          timeoutSeconds: 5 
        ports: 
        - containerPort: 8080 
        resources: 
          limits: 
            cpu: 100m 
            memory: 20Mi 
          requests: 
            cpu: 100m 
            memory: 20Mi 

服务:
apiVersion: v1 
kind: Service 
metadata: 
  name: default-http-backend 
  labels: 
    app: default-http-backend 
spec: 
  selector: 
    app: default-http-backend 
  ports: 
  - port: 80 
    targetPort: 8080 

请您参考如下方法:

删除curl -v <url> -H 'Accept: application/json'中冒号后的空格

错误消息Could not resolve host: application表示它使用application/json作为URL,而不是 header 。


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!