2017-07-15 1 views
0

私のspring boot/javaアプリケーションからkubernetes apiにPOSTを送信しようとしています。不足している必要なホストヘッダーが HTTPGETは同じ工場で働いているクライアントが返されました:私はこの私がJavaから取得していますエラーが400不正な要求であるカールjava apacheを使用してkubernetes apiに投稿しようとするとエラー400が発生する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 

から細かい作業を持っています。 私はそれを手動で追加しようとしました。

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

ただし、同じエラーが返されます。

任意のヒントは、あなたが前にCORSフィルタでヘッダ名を許可する必要があります

答えて

0

を高く評価しました。あなたは(メインで使用すると、注釈@Configurationを追加する必要があります)起源(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() { 
    // 
} 

}

メインまたはコンフィギュレーションクラスのを許可する必要がある場合にも、あなたはどのBeanを初期化する必要がありますCORSフィルタを処理します。それはそのように見えるはずです:

@Bean 
    public CorsFilter simpleCorsFilter() { 
     return new CorsFilter(); 
    } 
関連する問題