2017-07-15 76 views
0

我想從我的春季啓動/ java應用程序提交一個POST到kubernetes api。我有捲曲錯誤400當試圖發佈到kubernetes api使用java apache httpclient

這個工作的罰款
curl -v --cacert /var/run/secrets/kubernetes.io/serviceaccount/ca.crt -H "Authorization: Bearer $(cat /var/run/secrets/kubernetes.io/serviceaccount/token)" https://kubernetes/apis/batch/v1/namespaces/default/jobs -XPOST -H'Content-Type: application/yaml' [email protected] job.json 

我從Java得到的錯誤是400錯誤的請求:缺少必要的主機頭 的HTTPGET正在與同一個工廠返回客戶端。 我曾嘗試手動添加它,例如。

HttpClient client = factory.getHttpsClient(); 
    httpPost.setHeader("Host", "localhost"); 
    HttpResponse response = client.execute(httpPost); 

但是,返回相同的錯誤。

任何提示讚賞

回答

0

您必須在CORS過濾器之前允許標題名稱。此外,如果你必須允許原點(kubernetes的主機)

//Annotations for the CorsFilter class 
@Component 
@Order(Ordered.HIGHEST_PRECEDENCE) 

public final class CorsFilter implements Filter { 

public CorsFilter() { 
    super(); 
} 

@Override 
public final void doFilter(final ServletRequest req, final ServletResponse res, final FilterChain chain) throws IOException, ServletException { 

    final HttpServletResponse response = (HttpServletResponse) res; 
    final HttpServletRequest request = (HttpServletRequest) req; 

    response.setHeader("Access-Control-Allow-Origin", "the host of kubernetes ex: http://localhost:8083"); 
    response.setHeader("Access-Control-Allow-Methods", "POST, PUT, GET, OPTIONS, DELETE"); 
    response.setHeader("Access-Control-Max-Age", "3600"); 
    //here you add all hraders 
    response.setHeader("Access-Control-Allow-Headers", "Host, Origin, Content-Type"); 


    if (request.getMethod() != "OPTIONS") { 
     chain.doFilter(req, res); 
    } else { 
     // 
    } 
} 

@Override 
public void init(final FilterConfig filterConfig) { 
    // 
} 

@Override 
public void destroy() { 
    // 
} 

}

另外在主或配置類(主必須添加註釋@Configuration)你必須初始化一個Bean上處理CORS過濾器;它應該看起來像這樣:

@Bean 
    public CorsFilter simpleCorsFilter() { 
     return new CorsFilter(); 
    } 
相關問題