VirtualService路由仅使用一台主机

时间:2019-09-26 16:05:37

标签: networking kubernetes istio

我有以下VirtualService:

#include <stdio.h>

    /*Define structure
    ------------------*/
struct date
{
    int month;
    int day;
    int year;
};


    /*Declare function prototypes
    -----------------------------*/
struct date get_date (struct date);
void calc_date_number (struct date);


void main (void)
{
    struct date   udate, calc_date;
    printf("Welcome to the Date to Day-of-the-Week program.\n\nThe program will give the day of the  
           for any date from 1/1/1900.\n\n");

    get_date (udate);
    calc_date_number (calc_date);
}



    /*Define functions get_date
    ----------------------------*/
struct date get_date (struct date udate)
{
    do
    {
        printf ("Enter the date (mm/dd/yyyy): ");
        scanf ("%d/%d/%d", &udate.month, &udate.day, &udate.year);
        if (udate.month < 1 || udate.month > 12)
            printf ("Invalid month. Please re-enter date.\n\n");
        else if (udate.day <1 || udate.day > 31)
            printf ("Invalid day. Please re-enter date.\n\n");
        else if (udate.year < 1900)
            printf ("Invalid year. Please re-enter date.\n\n");
        else if (udate.month ==2 && udate.day == 29 && (udate.year !=0 && (udate.year == 0 || 
                 udate.year % 400 != 0)))
            printf ("Invalid date. Not a leap year. Please re-enter date.\n\n");

    }while (udate.month < 1 || udate.month > 12 || udate.day < 1 || udate.day > 31 || udate.year < 
            1900);

    return udate;

} /*End get_date*/

    /*Define function calc_date_number
    ----------------------------------*/
void calc_date_number (struct date calc_date)
{

    printf("calc_date is %i   %i   %i\n\n", calc_date.month, calc_date.day, calc_date.year);
    long int n;

    if (calc_date.month <= 2)
    {
        calc_date.year = calc_date.year - 1;
        calc_date.month = calc_date.month + 13;
    }
    else
    {
        calc_date.month = calc_date.month + 1;
    }

    n = 1461 * calc_date.year / 4 + 153 * calc_date.month / 5 + calc_date.day;
}/*End function calc_date_number*/

我希望/ postauth端点的调用将路由到postauth服务,而/ app端点的调用将路由到sa-frontend服务。发生的是,所有呼叫最终都被路由到文件中的第一个路由器,在上述情况下,路由到postauth,但是如果我更改顺序,它将变成sa-frontend

所有服务和部署都在同一个命名空间(dev)中。

这是预期的行为吗?我的解释是,以上内容应只允许调用/ postauth和/ app端点,而不能将其路由到各自的服务。

1 个答案:

答案 0 :(得分:0)

根据HTTPMatchRequest中的documentaion for Istio 1.3,您可以找到

  

字段:名称,类型: string

我在1.1和1.3版本之间比较了这些设置: 在版本1.3.4中,该伞兵正常工作,并且路由使用以下名称传播:

{}

在1.1版中,它无法正常工作。在这种情况下,请使用适当的release验证您的设置。

此外,请参阅Troubleshooting部分。

您可以验证集群中已应用的配置(更改),例如: Envoy实例的配置方式:

[
    {
        "name": "http.80",
        "virtualHosts": [
            {
                "name": "*:80",
                "domains": [
                    "*",
                    "*:80"
                ],
                "routes": [
                    {
                        "name": "ala1",
                        "match": {
                            "prefix": "/hello1",
                            "caseSensitive": true
                        },
                        "route": {
                            "cluster": "outbound|9020||hello1.default.svc.cluster.local",
.
.
.

                    {
                        "name": "ala2",
                        "match": {
                            "prefix": "/hello2",
                            "caseSensitive": true
                        },
                        "route": {
                            "cluster": "outbound|9030||hello2.default.svc.cluster.local",

验证服务的路由配置和虚拟主机:

istioctl proxy-config cluster -n istio-system your_istio-ingressgateway-name

希望获得帮助。